使用Notepad ++在一行中查找多个单词

时间:2014-06-08 23:44:10

标签: regex text editor line

以下是我在VS或Notepad ++中找到两个单词组合的功能。

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

Problem - 更改要搜索的字词的顺序。

例如:

用于搜索的

(function ( a, b, c, myVars) {})()文字

将找到

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

找不到

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

Need: Word1 <---> Word2

我很高兴看到答案。

更多示例:

html文件拆分行:查找:(&lt;),替换: \ n $ 0

带有名称

html连接标记:查找: \ n&lt; / 名称&gt; 替换:&lt; / 名称&gt;

换入标记查找: ^([\ w \ S] +)替换:&lt; 标记&GT; \ 1·/的代码&GT;

HTML字符代码&lt; - &amp;#x3c;和&GT; - &安培;#x3e;

1 个答案:

答案 0 :(得分:0)

我没有使用 Notepad ++ ,我使用的是 UltraEdit ,因此下面的正则表达式仅使用的UltraEdit

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

这个正则表达式首先搜索word1 OR word2,它必须作为完整单词而不是单词中的子字符串,因为\<表示单词的开头{{1} }表示单词的结尾。也可以使用\>(字边界)代替\b\<

如果在一行中找到2个单词中的一个,则接下来搜索0个或更多个字符是空格字符还是非贪婪的非空白字符。如果点的默认匹配行为是除行终止符之外的任何字符,则对于UltraEdit来限制对行的搜索是正确的,也可以使用\>而不是字符类.

在两个单词之间的该字符串的每个字符上应用否定前瞻,检查已匹配字符后面的下一个字符是否与第一个OR表达式找到的单词不相等。这个附加条件避免了在OR表达式中只找到包含2个单词之一的行两次。

最后,OR表达式从头开始第二次添加到表达式,但这次是非标记组。因此,搜索必须现在匹配OR表达式中的另一个单词以返回正结果。