【问题标题】:regular expression: find and replace each match正则表达式:查找并替换每个匹配项
【发布时间】:2009-08-03 04:06:28
【问题描述】:

我需要更改围绕字符串中某些内容的元素,保持内容不变。我是用正则表达式做的,但是当我使用位置参数($1)替换时,它只使用第一个匹配项。

例如,如果我有这个字符串:

<strong>I want</strong> to change <i>this</i> text, 
but <u>I can't</u>. <div class="question">Why?</div>.

我想改成:

<strong>I want</strong> to change <i>this</i> text, 
but <u>I can't</u>. <div class="question">Why?</div>.

但我只能得到这个:

<strong>I want<strong> to change <strong>this<strong> text, 
but <strong>I can't<strong>. <strong>Why?<strong>.

我正在使用以下正则表达式:

\x26lt;(.*?)\x26gt;

(全局,并将其替换为“&lt;$1&gt;”)

我想问题是我不知道会找到多少匹配项,以及如何引用每个匹配项。也许在 Perl 中我可以使用 $+,但这不起作用。我正在使用 Yahoo Pipes 的正则表达式模块执行此操作。它应该与 PHP 实现非常相似,afaik。

如何在 Yahoo Pipes 中分别使用每个匹配项?

【问题讨论】:

    标签: regex yahoo-pipes


    【解决方案1】:

    单独替换&amp;lt;&amp;gt; 可能更容易。这样它就变成了一个不需要使用反向引用的简单查找替换。

    【讨论】:

    • 我需要为此做两次通行证吗?一个改变 <s 而另一个改变 >s? (谢谢!)
    • 这将是两遍。只需在 < 上进行字符串替换和>然后将新字符串注入网页。
    • 我对 Yahoo Pipes 不是很熟悉,但大多数正则表达式引擎都有某种替换所有功能。你必须replaceAll("&amp;lt;", "&lt;")replaceAll("&amp;gt;", "&gt;"),所以是的,需要两个操作。
    • 哦。似乎我在做正则表达式时总是太贪心。我希望有一个我不知道的班轮,所以我不必做 2 次通行证。反向引用是一个几乎成功的希望。
    【解决方案2】:

    如果您选中 g 复选框,您应该能够执行单个操作,就像在这个屏幕截图中...:
    (来源:aleax.it

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      相关资源
      最近更新 更多