#php #regex #escaping
#php #регулярное выражение #экранирование
Вопрос:
У меня возникли проблемы с сопоставлением шаблона двойной обратной косой черты с функцией preg_match. Я понимаю, что для буквального сопоставления обратной косой черты вам нужно использовать 4 ( \\
) для сопоставления с одной косой чертой. Я предположил, что для сопоставления буквальной двойной косой черты, т.Е. \t
Будет ( \\\\t
) ?
Похоже, это не распознает шаблон, хотя в моих строках?
Вот что у меня есть на данный момент…
preg_match("/"amp;?$string:?(\\\\t)?".{1,7}$lang="amp;?(.*?):?"/smi",$cont,$matches);
Для дальнейшего объяснения:
Мне нужно, чтобы оно соответствовало следующему…
"Unlock\t Automatically ar="فتح\t تحديث"
"amp;Unlock Automatically ar="فتح\t تحديث"
"amp;Unlock: Automatically ar="فتح\t تحديث"
"amp;Unlock:Something\t Automatically ar="فتح\t تحديث"
Он правильно сопоставляет строки с амперсандами и двоеточиями, но не с косыми чертами?
У всех есть идеи?
Комментарии:
1.
t
Вероятно, это ваша проблема, посколькуt
это вкладка.2. Да, я так и предполагал, но я не контролирую используемые строковые существа? Существует ли известное обходное решение для этого?
3. Кстати, ни одно из ваших примеров предложений не содержит двойной обратной косой черты.
4. Изучите использование
preg_quote
динамических строк, используемых в вашем шаблоне. Обязательно укажите параметр delimiter .5. Нет, спасибо… но preg_quote не делает того, что мне нужно:-(
Ответ №1:
Одна обратная косая черта, ''
, используется для экранирования следующего символа. Итак, чтобы захватить одну обратную косую черту, вам нужно '\'
. Чтобы захватить double, вам нужно '\\'
.
preg_match('/(\\)/i', 'فتح\t تحديث', $result);
$result = Array
(
[0] => \
[1] => \
)
У вас также есть ‘t’, который сам по себе экранируется в строке, но по другим причинам. Итак, чтобы захватить все в одном:
preg_match('/(\\t)/i', 'فتح\t تحديث', $result);
$result = Array
(
[0] => \t
[1] => \t
)
Должно быть достаточно, чтобы вы начали. Дайте мне знать, если вам потребуется дополнительная помощь.
PS Вот отличный инструмент для тестирования регулярных выражений в PHP (PCRE RegEx) — http://regex.larsolavtorvik.com /