2013-04-25 134 views
0

我正在努力尋找一種使用正則表達式匹配兩個連續整個單詞的解決方案。我有一個文本框,用戶可以在其中輸入他們的搜索條件,並附上精確匹配的引文。引號和空格(如果有)然後由RegEx表達式替換。這裏有一個例子:在正則表達式中匹配兩個完整的單詞

用戶輸入:「蘋果橙」

轉換爲:

\bApple\W+(?:\w+\W+){1,6}?Orange\b 

然後,我正則表達式匹配將基於此轉換的標準。這些說明來自www.regular-expressions.info/near.html

也許我正在進行這完全錯誤的方式?我正在使用visual studio。任何幫助表示讚賞。

+1

您使用哪種語言?你可以使用像[String.Contains](http://msdn.microsoft.com/en-IN/library/dy85x1sa.aspx)或[String.IndexOf](http://msdn.microsoft.com/en- IN/library/k8b1470s.aspx)而不是正則表達式。 – 2013-04-25 13:41:46

+0

我正在使用正則表達式來匹配整個單詞,我不確定String.Contains或String.IndexOf可以完成此操作嗎? – 2013-04-25 13:52:54

+1

您可以通過在開頭和結尾處添加空格來搜索整個單詞,但在您的情況下,如果我理解正確,則更多的是搜索短語。 – 2013-04-25 14:00:10

回答

2

,如果你想完全匹配當用戶使用引號,那麼你應該只刪除引號,做直字符串比較(平等,不包含)

更新:根據意見

下面,你只需做同樣的事情,一個字匹配:

字:

\bApple\b

雙字

\bApple Orange\b

的想法是,用戶在搜索詞輸入和你匹配正是出於這個,所以你不會做圖案的詞本身匹配,只是邊界它(圍繞它的\b)。沒有理由去觸摸搜索詞本身(蘋果和Orange之間的所有東西,你試圖這樣做),因爲即使兩者之間的空間是他們搜索的一部分......除非你想要做一點點flexible..for例如,如果用戶在"Apple[lots of space here]Orange"進入僅計算,作爲一個單一的空間,那麼你可以做

\bApple\s+Orange\b

..但那麼你就有種從整體偏離「精確匹配「的主題......

旁註:你在評論中說,」CrabApple OrangeCrush「你不想要」蘋果橙「匹配。這就是爲什麼你使用\b字邊界。但是如果是我的話,我會考慮到這一點。或者至少,提供某種選擇來以這種方式搜索它。

+0

你能否給我提供一個簡單的例子,使用平等,不包含? – 2013-04-25 13:52:10

+0

它取決於你正在使用的語言,但通常它是一個雙等號'==',如在'if(a == b){// a等於b}' – 2013-04-25 13:53:25

+0

也取決於你正在搜索的內容..這是一個數據庫查詢?那麼通常它只是一個等號,就像在'select column from table where column ='search term'''就是一個精確的匹配查找 – 2013-04-25 13:58:06

相關問題