// 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
Przy użyciu trzech backslashy dopasować '\'
WZÓR interpretowane jako dopasować '\'
następnie przez 's'
.
echo preg_match('/\\\\s/', '\\ '); // 0
echo preg_match('/\\\\s/', '\\s'); // 1
Przy zastosowaniu czterech backslashy dopasować '\'
wzór poniżej jest interpretowany jako dopasować '\'
następnie znak spacji.
echo preg_match('/\\\\\s/', '\\ '); // 1
echo preg_match('/\\\\\s/', '\\s'); // 0
To samo dotyczy wnętrza klasy postaci.
echo preg_match('/[\\\\s]/', ' '); // 0
echo preg_match('/[\\\\\s]/', ' '); // 1
Żaden z powyższych wyników wpływa załączając sznurki w podwójne zamiast pojedynczych cudzysłowach.
Wnioski:
czy wewnątrz lub poza nawiasami klasy postaci, dosłowny odwrotny ukośnik można dopasować za pomocą zaledwie trzech backslashy '\\\'
chyba że następny znak w strukturze jest również odwrotnym ukośnikiem, w którym to przypadku dosłowny odwrotny ukośnik musi być dopasowany za pomocą czterech ukośników odwrotnych.
Zalecenie:
Zawsze użyć czterech backslashe '\\\\'
w deseń regex, gdy stara się dopasować odwrotny ukośnik.
Escape sequences.
W obu przypadkach silnik regex uważa to za pojedynczy ukośnik odwrotny? –
'\ [\]' byłoby wyjściem z nawisu zamykającego. '[\\]' będzie odwrotnym ukośnikiem w klasie znaków. klasa pojedynczego znaku jest raczej bezcelowa, nie różni się niczym od zwykłego "\\\". –