Я создаю свой собственный BBcode для форума. Я пытаюсь понять правильное выражение, но оно ускользает от меня уже несколько недель. Любые советы экспертов приветствуются.
Пример ввода (очень простой пример):
[quote=Bob]I like Candace. She is nice.[/quote]
Ashley Ryan Thomas
По сути, я хочу заключить любые имена (из указанного списка) в [user] [/ user] BBcode ... кроме, конечно, тех, которые указаны в кавычках, потому что это приводит к ужасным ошибкам синтаксического анализа.
Желаемый вывод:
[quote=Bob]I like [user]Candace[/user]. She is nice.[/quote]
[user]Ashley[/user] [user]Ryan[/user] [user]Thomas[/user]
Мой текущий код:
$searchArray = array(
'/(?i)([^=]|\b|\s|\/|\r|\n|\t|^)(Ashley|Bob|Candace|Ryan|Thomas)(\s|\r|\n|\t|,|\.(\b|\s|\.|$)|;|:|\'|"|-|!|\?|\)|\/|\[|$)/'
);
$replaceArray = array(
"\\1[user]\\2[/user]\\3"
);
$text = preg_replace($searchArray, $replaceArray, $input);
Что он в настоящее время производит:
[quote=Bob]I like [user]Candace[/user]. She is nice.[/quote]
[user]Ashley[/user] Ryan [user]Thomas[/user]
Обратите внимание, что Райан не инкапсулирован тегами [user]. Также обратите внимание, что большая часть дополнительных символов соответствия регулярному выражению добавлялась по мере необходимости по мере их появления на форумах, поэтому удаление их просто приведет к невозможности сопоставления в других ситуациях (т. Е. Нет-нет). Если, конечно, вы не обнаружите явную ошибку в самом регулярном выражении, в этом случае, пожалуйста, укажите на это.
Правда, любая помощь будет принята с благодарностью! Спасибо.