Я пытаюсь создать регулярное выражение в моем приложении 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 может измениться. Я знаю, что это очень плохой пример, но, надеюсь, это немного прояснит ситуацию.
На самом деле вам нужно сбежать $
символ обратной косой черты \
в вашем образце. Также, чтобы сделать его более уверенным, вы можете добавить \s*
что означает ноль или более пробелов перед =
персонаж.
Используйте этот шаблон:
/\$search(?!\s*\=)/i
/
ограничитель\$
Матчи $
в прямом смыслеsearch
буквально соответствует этому слову(?!
отрицательный Lookahead, который проверяет наличие обоих пробелов (если существует) а также =
после этого имени переменной./i
Modifire делает шаблон нечувствительным (нет разницы между a-z
а также A-Z
)Замечания: Вы должны использовать одинарные кавычки '/pattern/'
по шаблону выше. Если вы хотите использовать двойные кавычки "
тогда вы должны снова избежать обратной косой черты:
/\\$search(?!\\s*\\=)/i
$
является якорем в регулярном выражении для соответствия концу строки, поэтому, поскольку это специальный символ, вы должны избегать его.
Ты можешь использовать:
preg_replace("/(\\$search)(?!=)/i", $replacement, $string, -1, $count);
или же
preg_replace('/(\$search)(?!=)/i', $replacement, $string, -1, $count);