我在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 的颜色不能相同。
问题在于,第一次搜索会取代这不是正确的事情。
如何检测到研究与字符串相等?
答案 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
表示不能有前面的“[”一个“•”和一个空格。此外,如果•站在你的线的开头,那么你可以把^前面的