使用preg_replace的多个答案

时间:2015-07-30 18:27:34

标签: php regex

我在PHP中遇到preg_replace的问题。

我的文字:

[Derp] a
• [Derp] a

我的正则表达式:

$simple_search[0] = '/\[(.*?)\] (.*?)/is';
$simple_search[1] = '/\• \[(.*?)\] (.*?)/is';

我的主题:

$simple_replace[0] = "[color=#009D9D][$1][/color] $2";
$simple_replace[1] = "[color=#30BA76]• [$1][/color] [color=#92CF91]$2[/color]";

preg_replace之后:

[color=#009D9D][Derp][/color] a
[color=#30BA76]#color=#009D9D][Derp][/color[/color] [color=#606090]: [/color]a

(它是用于着色报价的工具)

[Derp] a •[Derp] a 的颜色不能相同。

问题在于,第一次搜索会取代这不是正确的事情。

如何检测到研究与字符串相等?

2 个答案:

答案 0 :(得分:0)

        $str = '[Derp] a
                • [Derp] a';

        $simple_search[0] = '/(\• )?(?P<m2>\[.*?\]) (?P<m3>.*)/i';

        echo $str = preg_replace_callback($simple_search[0],
            function ($m) {
                if (!$m[1]) return '[color=#009D9D]' . $m[2] . '[/color] ' . $m[3];
                else return '[color=#30BA76]• ' . $m[2] . '[/color] [color=#92CF91]' . $m[3] . '[/color]';
            }, $str
        );

结果

[color=#009D9D][Derp][/color] a
[color=#30BA76]• [Derp][/color] [color=#92CF91]a[/color]

答案 1 :(得分:0)

替换你的第一个正则表达式:

/(?<!\• )\[(.*?)\] (.*?)/is

表示不能有前面的“[”一个“•”和一个空格。此外,如果•站在你的线的开头,那么你可以把^前面的