我有以下输入字符串
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>
请参阅演示。
解释
.*
匹配太多字符的内部,我们使用[^<]*
,它匹配任何不是开始标签的字符。这样我们就不会进入另一个标签。[^>]*
为,[^<>]*
因此我们不会开始另一个标签