捕获字符串文本后的所有匹配模式

Capture all matching patterns after a string text

我想在 <ParagraphB> 之后捕获这两个值,但我目前只能捕获最后一个匹配项。到目前为止,这是我的正则表达式:

<ParagraphB>(?s).*<value>([^\<]*)

<ParagraphA>
<value>12</value>
<ParagraphB>
<value>34</value>
<value>56</value>

感谢任何帮助。

要多次捕获该值,我们需要使用 global 标志并在每次匹配中检索捕获的组。

演示: https://regex101.com/r/1Demzp/1

模式:(?:<ParagraphB>|\G<\/value>)\s*?<value>([^<]*)

解释:第一次匹配,<ParagraphB>。从下一次迭代开始,仅当字符串以 </value>

开头时才匹配
  • (?:<ParagraphB>|\G<\/value>):匹配 <ParagraphB> 或字符串应以 </value> 开头。 \G 用于 continuing matches.
  • \s* : 任意 space 个字符的非贪婪匹配
  • ([^<]*) : 捕获所有字符直到 <.