Regex не может захватить значения внутри […] […]

1

Я пытаюсь изменить цвет текста в моей строке:

моя строка:

$message="I have a [red][car]";

Я хочу зафиксировать значения внутри первого [...] и второго [...], а затем использовать его в

<b style='color:color'>car</b>

изменить цвет текста в соответствии со значением первого [...]

Пока у меня есть:

echo preg_replace("/\[([^\]]+)\]\[([^\]+])\]/i","<b style='color:$1'>$2</b>",$message);

Но он не работает, строка orignal возвращается как выход. Я не знаю, где мое регулярное выражение не получилось.

Пожалуйста помоги!

  • 5
    Вы не поместили ] : используйте '/\[([^\]]+)\]\[([^\]]+)\]/'
Теги:
preg-replace

2 ответа

6
Лучший ответ

Исправленное регулярное выражение:

'/\[([^\]]+)]\[([^\]]+)]/'

См. Демо-версию regex

Обратите внимание, что вам не нужно скрывать ] вне класса символов и не нужно в модификаторе /i, поскольку в вашем шаблоне нет букв. Кроме того, чтобы должным образом избежать специальных символов регулярных выражений, вам нужно либо удвоить escape файлы в двойной кавычки, либо использовать одну строку с кавычками.

Демоверсия IDEONE:

$message="I have a [red][car]";
echo preg_replace('/\[([^\]]+)]\[([^\]]+)]/',"<b style='color:$1'>$2</b>",$message);
// => I have a <b style='color:red'>car</b>
  • 1
    большое спасибо стрибижев, работает.
1
$message="I have a [red][car]";
echo preg_replace("/[^\[]+\[([^\]]+)\]\[([^\]]+)\]/i","&lt;b style='color:$1'&gt;$2&lt;/b&gt;",$message);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню