PHP разработки


Поиск/замена по шаблону в котором есть

Размещена 22 октября, 2008 года


Сравнение с шаблоном (LIKE REGEXP) не работает в SQL если в строке есть символ '\' (обратный слэш), даже если он экранирован. Почему?

Например, почему не работает такой запрос: SELECT * FROM tableName WHERE charFieldName LIKE "%\\%" - выбрать из таблицы tableName ряды в которых поле charFieldName содержит обратный слэш (\). При этом сам обратный слэш в запросе экранирован.

Ответ: Потому что запрос неправильно записан.

Правильный запрос выглядит так:
SELECT * FROM tableName WHERE charFieldName LIKE "%\\\\%"

Чтобы выполнить поиск символа '\', его следует указать как '\\\\'.
При чиной такой записи является то, что обратные слеши удаляются дважды: сначала синтаксическим анализатором, а потом - при выполнении сравнения с шаблоном, таким образом остается только один обратный слеш, который и будет обрабатываться.

Экранирование слэша в PHP

Допустим, у нас есть переменная:
$var='abcd\f\\gh';
Задача: Убрать из строки обратные слэши.
Вроде бы можно это сделать так:
$var = preg_replace('/\\/','',$var);
Но это работать не будет. Опять же из-за удаления синтаксическим анализатором. Чтобы это работало корректно, необходимо использовать конструкцию
$var = preg_replace('/\\\/','',$var);
либо
$var = preg_replace('/\\\\/','',$var);
К сожалению, удалить двойной обратный слэш (\\) так не получится. Потому что сколько не ставь обратных слэшей в шаблоне preg_replace('/\\\\/','',$var), удалится только второй слэш (в результате получится 'abcd\f\gh'), ну или возникнет Warning.
SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Стишки пирожки про Олега⁠⁠

Размещена 20 июня 2024 года

Олег купил презервативы
Проник в семидесятый год
И подарил их папе с мамой
Такой нелепый суицид

читать далее…

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…