2011-03-24 147 views
12

只是一個簡單的正則表達式,我不知道該怎麼寫。如何匹配正則表達式中的多個單詞

正則表達式必須確保一個字符串匹配所有3個單詞。我看如何使它匹配的3任

/advancedbrain|com_ixxocart|p\=completed/ 

,但我需要確保所有3個單詞存在於的字符串中。

這裏有話

  1. advancebrain
  2. com_ixxocart
  3. P =完成
+0

所以,當你有一個例子字符串「等等等等示例文本advancebrain其中#com_ixxocart等等blahp = completedstuff」? – 2011-03-24 15:59:05

+0

我個人會用3個正則表達式來做這件事。它可能相當醜陋,只有一個,可能會更慢。 – Pointy 2011-03-24 15:59:55

+0

這些來自查詢字符串嗎?如果是這樣,您可能不需要使用任何正則表達式 – racerror 2011-03-24 16:03:44

回答

16

使用lookahead assertions:如果這三個方面都存在

^(?=.*advancebrain)(?=.*com_ixxochart)(?=.*p=completed) 

將匹配。

你可能想添加在你的搜索字詞\b工作的界限,以確保它們是匹配的完整的單詞,而不是換句話說子(如advancebraindeath)如果你需要避免這種情況:

^(?=.*\badvancebrain\b)(?=.*\bcom_ixxochart\b)(?=.*\bp=completed\b) 
+0

我只給了一個輸入字段來放置這個正則表達式,它的谷歌分析。他們展示了他們的簡單/ yourregex /的例子。你會猜想這個lookahead會起作用嗎?我不知道他們將用什麼編程語言來運行正則表達式。 – UpHelix 2011-03-24 16:08:36

+0

GA(谷歌分析)支持lookahead。 http://www.lunametrics.com/blog/2007/08/08/regular-expressions-for-ga-bonus-iii-lookahead/ – UpHelix 2011-03-24 16:14:40

1

使用前瞻:

(?=.*\badvancebrain)(?=.*\bcom_ixxocart)(?=.*\bp=completed) 

順序無關緊要。所有三個都是必需的。

+0

在開始時更好地固定正則表達式,否則你會得到可怕的表現所有三個都在場。 – 2011-03-24 16:05:07

+0

是的,你的更好! – Tom 2011-03-24 16:06:15

4
^(?=.*?p=completed)(?=.*?advancebrain)(?=.*?com_ixxocart).*$ 

花了太長時間的測試和精煉= /哦..還會張貼我的答案