PHP-отрицательное регулярное выражение не работает

Я пытаюсь создать регулярное выражение в моем приложении PHP, которое принимает переменную, такую ​​как $searchи заменяет это другой переменной. Что я пытаюсь сделать конкретно, это заменить $search значение, только если оно не сопровождается непосредственно =,

Что я пробовал до сих пор:

preg_replace("/($search)(?!=)/i", $replacement, $string, -1, $count);

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

Если вам нужна какая-либо другая информация, дайте мне знать.

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

Для уточнения предположим следующий код:

$searchTerm = "Hello";
$search = "/($searchTerm)(<?!=)/i";
$replacement = '<span style="background:red;">$0</span>';
$result = preg_replace($search, $replacement, $string, -1, $count);

где значение $ string будет примерно таким:

$string = "hello=hola";

Таким образом, идея состоит в том, что, если за «привет» не последовали и «=», то он выделил бы его красным, но если это так, то ничего не происходит. Предположим, что значение $ string может измениться. Я знаю, что это очень плохой пример, но, надеюсь, это немного прояснит ситуацию.

0

Решение

На самом деле вам нужно сбежать $ символ обратной косой черты \ в вашем образце. Также, чтобы сделать его более уверенным, вы можете добавить \s* что означает ноль или более пробелов перед = персонаж.

Используйте этот шаблон:

/\$search(?!\s*\=)/i

Демо онлайн

  • / ограничитель
  • \$ Матчи $ в прямом смысле
  • search буквально соответствует этому слову
  • (?! отрицательный Lookahead, который проверяет наличие обоих пробелов (если существует) а также = после этого имени переменной.
  • /i Modifire делает шаблон нечувствительным (нет разницы между a-z а также A-Z)

Замечания: Вы должны использовать одинарные кавычки '/pattern/' по шаблону выше. Если вы хотите использовать двойные кавычки " тогда вы должны снова избежать обратной косой черты:

/\\$search(?!\\s*\\=)/i
1

Другие решения

$ является якорем в регулярном выражении для соответствия концу строки, поэтому, поскольку это специальный символ, вы должны избегать его.

Ты можешь использовать:

preg_replace("/(\\$search)(?!=)/i", $replacement, $string, -1, $count);

или же

preg_replace('/(\$search)(?!=)/i', $replacement, $string, -1, $count);

Regex demo

0

По вопросам рекламы [email protected]