2015-01-09 52 views
3

我的問題是在所有情況下,我可以使用(?= ...)|(?<= ...)而不是獨立的(?= ...)或(?<= ...)嗎?

我可以在任何情況下使用lookahead|lookbehind,而不是獨立的lookaheadlookbehind

我只是覺得

(?=...)|(?<=...)類似於\b

在我們的任期並不需要告訴我們要使用向左或向右字邊界(或向後看或提前),但只是想說「其中任何一個」。

從這個問題What's the difference between \b and \>, \< in regex?

我們將看到,我們可以使用的\<\>

而對於(?=...)|(?<=...)\b相反,我不知道它是安全的還是不說,我們可以用(?=...)|(?<=...)而不是獨立的(?=...)(?<=...)在所有情況下。

如果您有任何示例,(?=...)|(?<=...)不能使用而不是(?=...)(?<=...)請告訴我。

回答

0

連續查找是邏輯AND。
如果你把它們放在兩個交替之間,它們是邏輯或的。

您可以嵌套週轉。

(?= a | (?<! b)) [^c] 

這相當於

(?: (?= a) | (?<! b)) [^c] 

要記住的一點是,lookarounds從回溯安全。
而當你輸入一個lookaround它會保持一個單獨的搜索位置。

+0

是的,這就是爲什麼我們在'regex'中不需要'&'(邏輯運算符)的原因,因爲在'regex'的同一行上對齊的所有文本或命令實際上已經與'&'連接。對? – fronthem 2015-01-09 21:48:53

+0

@ terces907 - 邏輯幾乎相同,適用範圍界定。區別在於量詞可以使引擎回溯到不同的控制路徑。 – sln 2015-01-09 21:52:34

相關問題