如果找不到给定文本,匹配的正则表达式匹配尽可能少

时间:2016-11-29 08:17:41

标签: regex notepad++ regex-lookarounds

我有文字:

<a>
sdfsdf
<b>DDzz</b>
sdfsdf
</a>
<a>
sdfsdf
<b>DDzz</b>
sdfsdf
</a>
<a>
sdfsdf
<b>BBzz</b>
sdfsdf
</a>
<a>
sdfsdf
<b>DDzz</b>
sdfsdf
</a>

我无法将其解析为xml。我需要在这里使用正则表达式。这只是一个例子。

我希望正则表达式可以匹配不包含元素<a>...</a>的每个组b,文本以BB开头。

我想出了这个正则表达式: <a>.*?<b>(?!B).*?</b>.*?</a> 但它与最后一组相匹配:

<a>
sdfsdf
<b>BBzz</b>
sdfsdf
</a>
<a>
sdfsdf
<b>DDzz</b>
sdfsdf
</a>

这对我不好。

如何编写仅与我给定示例中的3个组匹配的正则表达式?

1

<a>
sdfsdf
<b>DDzz</b>
sdfsdf
</a>

2

<a>
sdfsdf
<b>DDzz</b>
sdfsdf
</a>

第3

<a>
sdfsdf
<b>DDzz</b>
sdfsdf
</a>

1 个答案:

答案 0 :(得分:2)

使用tempered greedy token正则表达式:

<a>(?:(?!<(?:b>BB|/?a>)).)*</a>

启用 .匹配换行符选项。

<强>详情:

  • <a> - 文字<a>字符序列
  • (?:(?!<(?:b>BB|/?a>)).)* - 一个与任何char(.)匹配的驯化贪婪令牌,它不是序列的起始符号,可以与(?!<(?:b>BB|/?a>))前瞻中的模式匹配(不是<b>BB</a><a>序列)
  • </a> - 文字</a>字符序列

enter image description here