我有以下输入字符串
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# 匹配组或匹配集合作为匹配组?
我有以下输入字符串
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# 匹配组或匹配集合作为匹配组?
试试下面的正则表达式,它使用正面的向后看,
(?<=>)<([A-Z][A-Z0-9]*)\b[^>]*>.*<\/\1>
>它查找紧随符号之后开始的标签。
解释:
(?<=>)此处使用正向lookbehind,它将匹配标记设置在>符号之后。<文字<符号。([A-Z][A-Z0-9]*\b[^>]*>)捕捉到下一个>符号。.*匹配除\n零次或多次以外的任何字符。<\/\1>匹配中立</+第一个捕获的组+>您可能知道,许多人更喜欢使用 DOM 解析器来解析 html。但是看看你现有的正则表达式,要修复它,我建议这样做:
<([A-Z][A-Z0-9]*)\b[^<>]*>[^<]*</\1>
请参阅演示。
解释
.*匹配太多字符的内部,我们使用[^<]*,它匹配任何不是开始标签的字符。这样我们就不会进入另一个标签。[^>]*为,[^<>]*因此我们不会开始另一个标签