正则表达式正匹配和负匹配

时间:2018-09-07 03:46:01

标签: regex

我要匹配 asp:DropDownList 不包含类 selectpicker

的所有行

这是我到目前为止所拥有的:

^((\b<asp:DropDownList\b)*(?!selectpicker).)*$

我的测试字符串是:

<asp:DropDownList class="form selectpicker">
<asp:DropDownList class="selectpicker">
<asp:DropDownList class="form">
<asp:TextBox class="selectpicker">
<asp:TextBox class="form">

我只希望列表中的第三项,因为那是唯一不包含该类的DropDownList标记。

2 个答案:

答案 0 :(得分:1)

您可以使用

^<asp:DropDownList(?!.*class="[^"]*selectpicker[^"]*").*>$

它使用否定前瞻来确保class之后的带引号的字符串不包含selectpicker。 (也就是说,在大多数情况下,最好使用实际的XML解析器)

https://regex101.com/r/ghhAL0/1

答案 1 :(得分:1)

以下是使用tempered greedy token的解决方案:

<asp:DropDownList (?:(?!class="[^"]*selectpicker[^"]*").)*>

它匹配任何不包含模式class="[^"]*selectpicker[^"]*"的内容。

.NET Regex Demo