我有以下输入字符串
Testing <B><I>bold italic</I></B> text.
以及正则表达式:
<([A-Z][A-Z0-9]*)\b[^>]*>.*</\1>
此正则表达式仅提供以下更大的匹配
<B><I>bold italic</I></B>
如何使用正则表达式来获得较小的匹配?
<I>bold italic</I>
我尝试使用非贪婪的运算符,但它也没有用。
是否可以使用类似java或c#匹配组或匹配集合将两者作为匹配组?
答案 0 :(得分:1)
尝试下面使用正面lookbehind的正则表达式
(?<=>)<([A-Z][A-Z0-9]*)\b[^>]*>.*<\/\1>
它会查找刚刚开始>
符号的标记。
<强>解释强>
(?<=>)
此处使用正面lookbehind,它在tp >
符号之后设置匹配标记。<
文字<
符号。([A-Z][A-Z0-9]*\b[^>]*>)
捕获下一个>
符号。.*
匹配除\n
以外的任何字符零次或多次。<\/\1>
匹配</
+首次捕获的群组+ >
答案 1 :(得分:1)
您可能知道,许多人更喜欢使用DOM解析器来解析html。但是看看你现有的正则表达式,修复它,我会建议:
<([A-Z][A-Z0-9]*)\b[^<>]*>[^<]*</\1>
请参阅the demo。
<强>解释强>
.*
内部匹配过多的字符,我们使用[^<]*
,它匹配任何不是开始标记的字符。这样我们就不会进入另一个标签。[^>]*
更改为[^<>]*
,因此我们不会启动另一个标记