Скажем, я делаю простую функцию BBCode с использованием регулярного выражения, и я хочу, чтобы тэг [color =] прекратил разбор в первой точке с запятой, чтобы избежать эксплойтов. Теперь я видел этот вопрос во всех stackoverflow, но он никогда не показывает, как его реализовать.
$regex = '/\[colour\=/[^;]*/](.*?)\[\/colour\]/is';
$replace = '<span style="color: $1">$2</span>';
Почему это дает мне ошибку в названии? Я не могу понять регулярное выражение для жизни меня, поэтому я действительно застрял здесь.
Если это помогает, вот оригинальное регулярное выражение, которое я хотел реализовать:
/[^;]*/
Побег косой черты:
$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>';
Попробуйте этот фрагмент кода:
$text = '[colour=red]Text in red[/colour]';
$regex = '/\[colour=([^;]*)\](.*?)\[\/colour\]/is';
$replace = '<span style="color: $1">$2</span>';
echo preg_replace($regex, $replace, $text);