2011-09-02 24 views
1

我需要一個正則表達式來驗證多個必須存在的字符串的文本。說我有如何使用正則表達式匹配文本中的多個字符串?

  1. 玫瑰色使孩子們去野外
  2. 瑪利亞野生男孩是很瘋狂的文字確實
  3. 亨利是一個野小子
  4. 仙跳動着3個男孩昨晚

我想匹配既有'男孩'又有'狂野'(以任意順序)的句子。正確的匹配是1和2,但不是3和4.

任何人?

+0

容易得多,如果你的國家,你會用什麼工具,正則表達式 –

+0

基里爾給了以下的罰款建議,回答你的問題,但爲了清晰起見,我在ASP.NET/C#中使用RegEx類... – Alex

回答

3
.*(?=\bboys\b).*(?=\bwild\b)|.*(?=\bwild\b).*(?=\bboys\b) 
0

(^.*boys.*wild.* $|^.*wild.*boys.*$)

通過適當的轉義取決於你使用它在那裏,當然。

3

http://www.regular-expressions.info/reference.html

/.*?wild.*?boys.*|.*?boys.*?wild.*/ 

你想使用.*?因爲剛.*單是貪婪,會消耗掉整個字符串。在一場貪婪的比賽中,你將沒有任何人物可以與「狂野」和「男孩」相匹配,所以它總是會失敗。

+1

這將找到包含其中任何一個的文本,而不是兩個。 – mcrumley

3

正則表達式在這裏矯枉過正。這工作得很好,是更具可讀性:

for (String str : new String[] { "Rosy made the boys go wild", "Marys wild boys are very crazy indeed", 
     "Henry is a wild boy", "Sally danced with 3 boys last night" }) { 
    if (str.contains("wild") && str.contains("boys")) { 
     System.out.println(str); 
    } 
} 

打印:

Rosy made the boys go wild 
Marys wild boys are very crazy indeed 
+0

你怎麼知道OP使用Java? – Daniel

+0

我同意你的觀點。但我需要這個更靈活的驗證系統,包括對更復雜的正則表達式的支持...... – Alex

相關問題