警告:preg_replace():未知修饰符'['

时间:2015-01-08 14:08:58

标签: php regex

说我正在使用正则表达式创建一个简单的BBCode函数,我希望[color =]标记在第一个分号处停止解析以避免利用漏洞。现在我已经在堆栈溢出中看到了这个问题,但它从未说明如何实现它。

$regex = '/\[colour\=/[^;]*/](.*?)\[\/colour\]/is';
$replace = '<span style="color: $1">$2</span>';

为什么这会给我标题中的错误?我不能为我的生活找出正则表达式,所以我真的被困在这里。

如果它有帮助,这是我想要实现的原始正则表达式:

/[^;]*/

2 个答案:

答案 0 :(得分:3)

逃避斜线:

$regex = '/\[colour\=\/[^;]*\/](.*?)\[\/colour\]/is';
//            here __^    __^

或使用其他分隔符:

$regex = '#\[colour=/[^;]*/](.*?)\[/colour\]#is';

但我猜正则表达式是:

$regex = '#\[colour=/[^;]*\](.*?)\[/colour\]#is';
//       backslash here __^

根据更换部分:

$regex = '#\[colour=([^;]+)\](.*?)\[/colour\]#is';
$replace = '<span style="color: $1">$2</span>';

根据评论进行编辑:

$regex = '#\[colour=(.*?)\](.*?)\[/colour\]#is';
$replace = '<span style="color: $1">$2</span>';

答案 1 :(得分:0)

尝试以下代码片段:

$text = '[colour=red]Text in red[/colour]';
$regex = '/\[colour=([^;]*)\](.*?)\[\/colour\]/is';
$replace = '<span style="color: $1">$2</span>';

echo preg_replace($regex, $replace, $text);