Regex 正则表达式获取所有匹配,包括较小的子匹配

Regex 正则表达式获取所有匹配,包括较小的子匹配,regex,non-greedy,Regex,Non Greedy,我有以下输入字符串 Testing <B><I>bold italic</I></B> text. 测试粗体斜体文本。 以及以下正则表达式: <([A-Z][A-Z0-9]*)\b[^>]*>.*</\1> ]*>* 这个正则表达式只提供以下更大的匹配 <B><I>bold italic</I></B> 粗体斜体 如何使用正则表达式获得较小的匹配 <I

我有以下输入字符串

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>
(?)]*>*

它查找紧跟在
符号之后开始的标记

说明:

  • (?)
    此处使用正向查找,它在
    符号之后设置匹配标记
  • 捕获下一个
    符号
  • *
    匹配除
    \n
    以外的任何字符零次或多次
  • 匹配lietral

您可能知道,许多人更喜欢使用DOM解析器来解析html。但考虑到您现有的正则表达式,为了修复它,我建议:

<([A-Z][A-Z0-9]*)\b[^<>]*>[^<]*</\1>

[^FYI,添加了演示和解释。:)谢谢,它起作用了。顺便说一句,我这样做不是为了解析HTML,我只是为了学习正则表达式。是否可以使用单个正则表达式在两个匹配中循环?在任何编程语言中都可以。是的。大多数编程语言支持lookback。在java中,您需要再次避开反斜杠因为模式被双引号包围,而不是正斜杠。我试图用c#获取所有匹配项,但它只返回了较小的一个。是否可以一个接一个地获取两个匹配项?如果你能给我看java/c#代码,那就太好了。将输入放在这个链接中并保存正则表达式。然后将链接放回这里。然后,解释你要做什么你想在输入上匹配。然后我给你看c代码。