Изменить весь цвет текста в скобках внутри строки php - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь изменить цвет текста в строке, обозначенной скобками или любым специальным символом в этом отношении. Скажем, у меня есть эта строка -

$text = 'Hello [how are you?]';

Как изменить цвет текстаэто просто в скобках?

Я пытался preg_match, но я не делаю это правильно ..

$new_text = preg_replace('/(^|\s+)[([0-9a-zA-Z]+)](\b|$)/', '$1<span style="color:red;">#$2</span>', $text);

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Даже если ответ уже есть, позвольте мне разбить проблемы в вашем регулярном выражении:

  • Класс символов в исходном регулярном выражении не включает ? или пробел.Он также не может содержать знаки препинания или переноса.
  • Внешние скобки не ограничены, поэтому вместо ваших предполагаемых "что-нибудь между квадратными скобками" движок интерпретирует его как класс символов (список допустимых символов для сопоставления), а затем выбрасывает синтаксическую ошибку.
  • Вы используете группы захвата в качестве якорей (это работает, потому что вы учли их при замене, но на самом деле не нужны).

См. @ simonw16ответьте за правильное выражение.

0 голосов
/ 11 октября 2018

Вам нужно только простое регулярное выражение для этого.[+ любой символ +].И вам нужно только заменить содержимое в скобках, чтобы вы могли использовать () группы захвата для инкапсуляции изменяемого текста.

$new_text = preg_replace('/\[([^\]]+)\]/', '<span style="color:red;">$1</span>', $text);

РЕДАКТИРОВАТЬ:

Измененорегулярное выражение.Вместо того, чтобы сопоставлять все (что соответствует второму вхождению ]), я сопоставляю все до первого вхождения ]

Еще лучше, поскольку @msg указывает в комментариях: регулярное выражение может быть: /\[(.*?)\]/

...