【问题标题】:I want replace pattern that is matched我想要替换匹配的模式
【发布时间】:2012-05-04 21:24:44
【问题描述】:

我正在尝试替换匹配的字符串 见下面的例子

<?php
    $str="this is going to bold [[this]]";
    echo preg_replace("/[[(.*)]]+/i","<b>$1</b>",$str);
?>

所以输出会是这样的

这将加粗这个

编辑:

<?php
    $str="bhai bhai *that* -wow- perfect";
    $find[0]="/*(.+)*/i";
    $find[1]="/-(.+)-/i";
    $rep[0]="<b>$1</b>";
    $rep[1]="<i>$1</i>";
    echo preg_replace($find,$rep,$str);
?>

这是显示警告

警告:preg_replace() [function.preg-replace]:编译失败:在 C:\xampp\htdocs\page.php 第 7 行的偏移量 0 处没有重复内容

【问题讨论】:

  • [] 是 PCRE 中的特殊字符,因此必须转义。此外,您可能希望使用非贪婪组。 (.*?) 否则你会遇到一些有趣的粗体问题。
  • 我改成了这个 ...echo preg_replace("/[[+(.*)+]]/i","$1",$str);。 ...但我看到了这个输出............这将是粗体
  • @user1331534 检查我的答案。

标签: php regex preg-replace


【解决方案1】:

试试这个:

<?php
    $str="this is going to bold [[this]]";
    echo preg_replace("/\[\[(.+)\]\]+/i","<b>$1</b>",$str);
?>

输出:

这是要加粗的这个


提示:

[] 字符被视为特殊,因此您必须将它们转义(例如:\[\])。


更新:


<?php
    $str="bhai bhai *that* -wow- perfect";
    $find[0]="/\*(.+)\*/i";
    $find[1]="/\-(.+)\-/i";
    $rep[0]="<b>$1</b>";
    $rep[1]="<i>$1</i>";
    echo preg_replace($find,$rep,$str);
?>

【讨论】:

  • (.+) 和 (.*) 有什么区别?
  • @user1331534 + 表示该模式要匹配一次或多次,而* 表示要匹配零次或多次(这意味着它可能不匹配)。
  • @user1331534 示例(来自维基百科) ab*c 匹配“ac”、“abc”、“abbc”、“abbbc”,等等。 ab+c 匹配“abc”、“abbc”、“abbbc”等,但不匹配“ac”
  • 关于我想改进的问题
【解决方案2】:

试穿一下尺寸

<?php
    $str="this is going to bold [[this]]";
    echo preg_replace("/(?:\[\[)(.*?)(?:\]\])/i","<b>$1</b>",$str);
?>

【讨论】:

    【解决方案3】:

    您需要转义正则表达式中的方括号。最终表达式应如下所示:

    echo preg_replace('/\[\[(.*?)\]\]/im', '<b>$1</b>', $str);
    

    方括号是用于定义一组字符的特殊字符,因此如果您希望按字面意思匹配它们,则必须对其进行转义。

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 1970-01-01
      • 2023-01-26
      • 2013-04-07
      • 2010-11-02
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多