REGEX — предварительный поиск динамического содержимого

#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
){
  

Это не означает, что это ваша единственная проблема с кодом. Вам нужно выполнить проверку ошибок, чтобы действительно найти ошибку.