【问题标题】:Does preg_replace use a regular expression to target, or some other format?preg_replace 是使用正则表达式来定位,还是使用其他格式?
【发布时间】:2013-06-14 15:47:03
【问题描述】:

我正在尝试替换所有出现的三个字母(大写)后跟 5 个数字(0-9)的组,然后用链接替换它们。到目前为止,我所做的一切似乎都不起作用。这就是我目前所拥有的。

return preg_replace("(MTM|SIR|FDF|TAA)[0-9]{5}", "<a href='$&'>$&</a>", $str);

【问题讨论】:

    标签: php regex function replace targeting


    【解决方案1】:

    您不需要在您的案例中使用捕获组,因为您可以使用 $0 来引用整个模式。而且你必须在你的模式中添加分隔符:

    $str = preg_replace('~(?>MTM|SIR|FDF|TAA)\d{5}~', '<a href="$0">$0</a>', $str);
    

    【讨论】:

      【解决方案2】:

      通过将字符包装在一个组中来创建对字符的反向引用。然后用$1引用第一组的内容。

      return preg_replace("/((?:MTM|SIR|FDF|TAA)[0-9]{5})/", "<a href='$1'>$1</a>", $str);
      

      另外,您可能需要(MTM|SIR|FDF|TAA) 而不是[MTM|SIR|FDF|TAA]{3}。这意味着您必须拥有MTMSIRFDFTAA

      【讨论】:

      • 啊,很公平。我从 OP 的解决方案中复制并修改了模式。我将编辑我的答案。
      猜你喜欢
      • 2012-09-10
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      相关资源
      最近更新 更多