如何使用否定搜索进行正则表达式?

时间:2015-09-05 13:58:25

标签: regex negative-lookbehind

我想在文档中搜索以下字符串

<whoName>[substring]</whoName>

where substring!=&#34; self&#34;

所以

<whoName>other</whoName> 

会通过。

但是

<whoName>self</whoName> 

会失败

3 个答案:

答案 0 :(得分:3)

你可以使用这种基于正则表达式的负前瞻:

<(whoName)>(?!self\s*<).*?<\/\1>

RegEx Demo

正则表达式分手:

<(whoName)>  # Match <whoName> and capture it ($1)
(?!self\s*<) # Negative lookahead that means current position is not followed by literal 
             # self followed by 0 or more spaces and <
.*?          # Match 0 or more characters (non-greedy)
<\/\1>       # Match closing tag using back-reference to captured group #1

答案 1 :(得分:1)

使用此正则表达式:

^<whoName>((?!self<).)*</whoName>

在记事本++和regex101中测试

答案 2 :(得分:1)

您可以找到解决方案here

您可以使用类似

的内容
<whoName>(?!self)[a-z0-9]*<\/whoName>

(试试这里:https://regex101.com/r/vW8sP3/1)。

您可以想象相关部分是(?!self)