我有文字:
<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>
答案 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>
字符序列