【问题标题】:Capture all matching patterns after a string text捕获字符串文本之后的所有匹配模式
【发布时间】:2020-12-01 01:49:23
【问题描述】:

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

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

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

感谢任何帮助。

【问题讨论】:

    标签: regex pattern-matching match matching pcre


    【解决方案1】:

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

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

    模式: (?:&lt;ParagraphB&gt;|\G&lt;\/value&gt;)\s*?&lt;value&gt;([^&lt;]*)

    解释:第一次匹配,&lt;ParagraphB&gt;。从下一次迭代开始,仅当字符串以 &lt;/value&gt; 开头时才匹配

    • (?:&lt;ParagraphB&gt;|\G&lt;\/value&gt;):匹配&lt;ParagraphB&gt; 或字符串应以&lt;/value&gt; 开头。 \G 代表continuing matches
    • \s* : 任意空格字符的非贪婪匹配
    • ([^&lt;]*) :捕获所有字符直到&lt;

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 1970-01-01
      • 2016-01-02
      • 2013-06-04
      • 1970-01-01
      • 2014-03-14
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多