免責聲明:我不認爲這是What's the regex to match anything except a double quote not preceded by a backslash?的重複,因爲OA有定界雙引號,他/她可以使用。如何匹配任何字符(包括特殊字符)的字符串,除了在較大的表達式中沒有前面加反斜槓的冒號?
我試圖匹配Java中的單個行字符串取入的僞代碼如下形式,其中[any!=:]
是短期的「除了一個冒號任何字符至少一個未經前述反斜槓」。
[any!=:]::[any!=:]:[any!=:]
我不擅長的正則表達式,但我檢查了負回顧後並紛紛拿出(不是Java,但常規的正則表達式):
[^(?<!\\):]+:{2}[^(?<!\\):]+:[^(?<!\\):]+
這確實匹配類似
(1)asd::asd:asd
但確實不的比賽,例如,
(2)asd\:asd::asd\:asd:ads\:asd
(然而,它應該)。
以accepted answer來解決上面提到的問題,我也嘗試了以下方法。
([^(?<!\\):]|\\:)+:{2}([^(?<!\\):]|\\:)+:([^(?<!\\):]|\\:)+
這適用於(2),對於一些但不是所有特殊字符(根據RegexPlanet)。它在[c]::[c]:[c]
的組合中使用的字符[c]
例如是$
,"
,%
,&
,/
,+
。它的作用是而不是適用於例如?
,!
,)
,\
。
通常的元字符{}^$ | *。+?和。
爲什麼然後我的正則表達式爲一些元字符(因爲他們顯然被稱爲)工作,但不是其他人?我怎樣才能「修復」我的正則表達式來考慮那些不起作用的東西?
要匹配任意字符,除了冒號沒有反斜槓,我使用的這個表達式(http://regex101.com/r/hP8sG2/1) – RevanProdigalKnight
@RevanProdigalKnight如果一個字符串以'\:'開頭(不確定OP是否需要這樣做)。 – Sam
@Sam Well ....那時我很茫然。 – RevanProdigalKnight