據對堆棧溢出以下answer:(?= *巴茲)正則表達式與運算符不工作
(?= * FOO)
這是說的正則表達式的FOO必須出現任何地方和巴斯必須出現在任何地方,不一定按照這種順序並可能重疊。
這個正則表達式應該與那些話富和巴茲:
Where foo have baz all my life
然而,這是行不通的。也不在regexr也不在regexpal.com。
據對堆棧溢出以下answer:(?= *巴茲)正則表達式與運算符不工作
(?= * FOO)
這是說的正則表達式的FOO必須出現任何地方和巴斯必須出現在任何地方,不一定按照這種順序並可能重疊。
這個正則表達式應該與那些話富和巴茲:
Where foo have baz all my life
然而,這是行不通的。也不在regexr也不在regexpal.com。
你需要創建一個圍繞foo
和baz
捕獲組,因爲環視不是捕獲組,但斷言。
該向前本身不是捕獲組。它不包括在編號反向引用的計數中。 如果要將正則表達式的匹配存儲在預見範圍內,則必須在預見範圍內的正則表達式周圍捕獲括號,如下所示:(?=(regex))。另一種方式將無法工作,因爲在捕獲組存儲其匹配時,前瞻已經放棄了正則表達式匹配。
http://www.regular-expressions.info/lookaround.html
讓你的正則表達式:
(?=.+?(foo))(?=.+?(baz))
注先行內的捕獲組。
明白了。但是,如果你從foo開始;它不起作用。 –
這是因爲積極的向前看。它至少需要一個字符(因爲我把量詞變成了'+?' - *我的不好*)。如果你在'.'之後改變'+?',量化'*',那麼它會:https://regex101.com/r/rS8sK6/2 –
謝謝。現在所有的作品。任何想法爲什麼http://regexpal.com/不適用於這個表達式? –
變形只是斷言,不會匹配任何單個字符。
(?=.*foo)(?=.*baz)
聲稱,在比賽將要happend行必須包含foo
和baz
字符串。而且我建議你使用錨以及上面的外觀。
^(?=.*foo)(?=.*baz)
這將存在於行首的邊界。
上述正則表達式會有幫助嗎?
當您要打印字符串foo
和baz
出現的整行時,這很有用。
在JS,你可以寫
/^(?=.*foo)(?=.*baz)/m.test(string);
如果只有兩個你正在尋找的字符串,你可以這樣做:
(XXX * YYY)|(YYY * XXX)
它將搜索XXX和YYY在兩個訂單的同一行中。
也許效率不高,但它很簡單,有效。
類似於:https://regex101.com/r/rS8sK6/1? –
@ʰᵈˑ:優秀!你能向我解釋一下表達嗎? –