说我正在使用正则表达式创建一个简单的BBCode函数,我希望[color =]标记在第一个分号处停止解析以避免利用漏洞。现在我已经在堆栈溢出中看到了这个问题,但它从未说明如何实现它。
$regex = '/\[colour\=/[^;]*/](.*?)\[\/colour\]/is';
$replace = '<span style="color: $1">$2</span>';
为什么这会给我标题中的错误?我不能为我的生活找出正则表达式,所以我真的被困在这里。
如果它有帮助,这是我想要实现的原始正则表达式:
/[^;]*/
答案 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);