#php #regex #preg-replace
#php #регулярное выражение #preg-заменить
Вопрос:
Я создаю систему, которая берет все необязательные предметы из образования и помещает их в базу данных. Это работает нормально.
Теперь я хочу убедиться, что если вы выберете «Финансы A», вы не сможете выбрать «Финансы C», я пытаюсь сделать это с preg_replace
, поскольку объект является массивом. Но он продолжает выдавать мне ошибку:
Delimiter must not be alphanumeric or backslash
Теперь вот часть кода:
if
(
preg_replace("/" $name_without_level " (A|B|C)/", "", $andre_fag)
== $andre_fag
|| preg_replace("/" $name_without_level " (A|B|C)/", "", $andre_fag2)
== $andre_fag2
){
Переменная $name_without_level
присваивает имя объекта без A, B или C, уровня.
Как исправить ошибку? Я перепробовал все, что мог придумать.
Комментарии:
1. Вам нужно добавить обработку ошибок в свой код. В случае ошибки вы должны показать себе регулярное выражение, которое не удалось. Тогда вы увидите, что не так. В любом случае вы должны добавить к своему вопросу, что
$name_without_level
такое.2. Означает ли «вот часть кода:», что это не та строка кода, которая упоминается в сообщении об ошибке? Потому что, если бы даже в вашей переменной было пусто
/
, эта ошибка pcre не соответствовала бы.
Ответ №1:
Представьте, что $name_without_level
это просто "Finance / Markets"
. Представьте, что происходит с вашим регулярным выражением.
Используйте preg_quote
Docs, чтобы убедиться, что вы ищете правильную строку буквально, и вы не уничтожаете свое регулярное выражение:
$pattern = sprintf('/%s (A|B|C)/', preg_quote($name_without_level));
if
(
preg_replace($pattern, "", $andre_fag) == $andre_fag
|| preg_replace($pattern, "", $andre_fag2) == $andre_fag2
){
Это не означает, что это ваша единственная проблема с кодом. Вам нужно выполнить проверку ошибок, чтобы действительно найти ошибку.