// PHP 5.4.1
// Either three or four \ can be used to match a '\'.
echo preg_match( '/\\\/', '\\' ); // 1
echo preg_match( '/\\\\/', '\\' ); // 1
// Match two backslashes `\\`.
echo preg_match( '/\\\\\\/', '\\\\' ); // Warning: No ending delimiter '/' found
echo preg_match( '/\\\\\\\/', '\\\\' ); // 1
echo preg_match( '/\\\\\\\\/', '\\\\' ); // 1
// Match one backslash using a character class.
echo preg_match( '/[\\]/', '\\' ); // 0
echo preg_match( '/[\\\]/', '\\' ); // 1
echo preg_match( '/[\\\\]/', '\\' ); // 1
При использовании трех обратных косых черт для соответствия '\'
приведенный ниже шаблон интерпретируется как соответствие '\'
, за которым следует 's'
.
echo preg_match( '/\\\\s/', '\\ ' ); // 0
echo preg_match( '/\\\\s/', '\\s' ); // 1
При использовании четырех символов обратной косой черты для соответствия '\'
приведенный ниже шаблон интерпретируется как соответствие '\'
, за которым следует символ пробела.
echo preg_match( '/\\\\\s/', '\\ ' ); // 1
echo preg_match( '/\\\\\s/', '\\s' ); // 0
То же самое относится, если внутри класса символов.
echo preg_match( '/[\\\\s]/', ' ' ); // 0
echo preg_match( '/[\\\\\s]/', ' ' ); // 1
На приведенные выше результаты не влияет заключение строк в двойные кавычки вместо одинарных.
Выводы.
Буквенная обратная косая черта, внутри или вне класса символов, может быть сопоставлена с помощью всего трех обратных косых черт '\\\'
, если только следующий символ в шаблоне также не имеет обратной косой черты, и в этом случае буквальная обратная косая черта должна сопоставляться с использованием четырех обратных косых черт.
Рекомендация.
Всегда используйте четыре символа обратной косой черты '\\\\'
в шаблоне регулярного выражения при поиске совпадения с обратной косой чертой.
Escape-последовательности.
person
MikeM
schedule
12.03.2013