我想要匹配的替换模式

时间:2012-04-24 08:45:18

标签: php regex preg-replace

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

<?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]:编译失败:在第7行的C:\ xampp \ htdocs \ page.php中偏移0处不重复

3 个答案:

答案 0 :(得分:4)

试试这个:

<?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);
?>

答案 1 :(得分:0)

尝试使用尺寸

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

答案 2 :(得分:0)

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

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

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