2010-05-28 47 views
1

可能重複的順序:
Regular Expressions: Is there an AND operator?讓正則表達式忽略搜索字詞

我讓用戶輸入搜索詞:「富巴」。

我想給用戶查詢轉換爲一個相匹配的詞串,而忽略了順序:

bla foo bla bar = match 
    ^^^  ^^^ 
bla bar bla foo = match (order = reversed) 
    ^^^  ^^^ 
bla bla bla foo = no match (only one word) 
      ^^^ 
bar bla bla bla = no match (only one word) 
^^^ 

注:的例子包含2個字,但我的用戶會去野外,並會輸入更多的單詞。

如果訂單不容忽視,這很簡單:通過更換一個空間,我有一個很好的匹配「*」。

但我怎麼可以讓正則表達式忽略的順序,並且仍然匹配兩個(或更多)的話嗎?

我是否需要生成一個匹配可能的組合順序的正則表達式?

回答

1

我推薦一種混合的方法。將搜索詞| |分離存儲在變量$ search中。然後查找/(?:$search) ... (?:$search)/g,其中(?:$ search)重複次數等於搜索項數。

如果匹配,將其拆分成條目,排序並檢查重複。如果沒有,則匹配;如果有重複,請繼續下一個。

您正在使用哪種.NET語言?我們可能想要提供示例代碼。

1

當順序並不重要,它基本上是一個一系列獨立的搜索,對不對?你能簡單地對每個單詞執行1次搜索,只返回所有搜索成功的結果嗎?

+0

這是計劃B.使用單個正則表達式需要更少的重構,而我今天很懶。 – GvS 2010-05-28 14:09:03