2014-06-08 64 views
0

以下是我在VS或Notepad ++中查找兩個單詞組合的功能。使用記事本在一行中查找多個單詞++

查找:Word1+[ \w\S]*(?=Word2)

Problem - 更改單詞的順序來搜索。

例如:

搜索

function+[ \w\S]*(?=myVars)

(function (a, b, c, myVars) {})()文本會被發現。

myVars+[ \w\S]*(?=function)不會被發現。

Need: Word1 <--->Word2

我會很高興地看到答案。

更多的例子:

HTML文件分割線:          發現:        (<),          取代:             \ N $ 0

HTML加入標籤與:          發現:         \ n </ >           取代:           </名稱 >

渦卷在標籤:          發現:         ^([\ W \ S] +)        取代:           < 標籤 > \ 1 </標籤 >

HTML字符代碼          <     -     &#X3C;              和    >     -     &#x3e;

回答

0

我不使用記事本++,我使用的UltraEdit 因此下面的正則表達式僅與的UltraEdit Perl的正則表達式引擎的測試。

\<(word1|word2)\>(?:[\t \S](?!\<\1\>))*?\<(?:word1|word2)\> 

這個正則表達式首先搜索任一word1 OR word2必須找到作爲完整的詞而不是作爲一個字作爲\<內子指字的開頭和\>指字的結束。也可以使用\b(字邊界)代替\<\>

如果在一行中找到2個單詞中的一個,則搜索下一個0或更多字符,它們是空格字符或任何非空白字符非貪婪。如果點的默認匹配行爲是除行結束符之外的任何字符(UltraEdit限制行上的搜索),則也可以使用.而不是字符類[\t \S]

在這兩個單詞之間的這個字符串的每個字符上都會應用一個負向超前檢查,以檢查已經匹配的字符之後的下一個字符是否與第一個OR表達式找到的單詞不相等。這種附加條件避免查找只包含OR表達式中兩個單詞中的一個的行兩次。

最後從開始的OR表達式第二次添加到表達式,但這次是作爲非標記組。因此,搜索必須與OR表達式中的另一個詞匹配才能返回正確的結果。

相關問題