// 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
Khi sử dụng ba dấu xồ nguợc để phù hợp với một '\'
mô hình dưới đây được hiểu như là phù hợp với một '\'
tiếp theo là một 's'
.
echo preg_match('/\\\\s/', '\\ '); // 0
echo preg_match('/\\\\s/', '\\s'); // 1
Khi sử dụng bốn backslashes để phù hợp với một '\'
mô hình dưới đây được hiểu như là phù hợp với một '\'
theo sau là một nhân vật không gian.
echo preg_match('/\\\\\s/', '\\ '); // 1
echo preg_match('/\\\\\s/', '\\s'); // 0
Điều tương tự cũng áp dụng nếu bên trong một lớp nhân vật.
echo preg_match('/[\\\\s]/', ' '); // 0
echo preg_match('/[\\\\\s]/', ' '); // 1
Không có kết quả nào ở trên bị ảnh hưởng bởi việc kèm theo chuỗi gấp đôi thay vì dấu nháy đơn.
Kết luận:
Cho dù bên trong hay bên ngoài một lớp nhân vật trong ngoặc vuông, một dấu chéo ngược nghĩa đen có thể được xuất hiện chỉ sử dụng ba dấu xồ nguợc '\\\'
trừ khi nhân vật tiếp theo trong mô hình cũng được backslashed, trong trường hợp này xuyệc ngược đen phải phù hợp bằng bốn dấu gạch chéo ngược.
Khuyến nghị:
Luôn luôn sử dụng bốn backslashes '\\\\'
trong một mô hình regex khi tìm kiếm để phù hợp với một dấu gạch chéo.
Escape sequences.
Vì vậy, trong cả hai trường hợp, công cụ regex coi đó là một dấu gạch chéo ngược duy nhất? –
'\ [\]' sẽ là lối thoát của khung đóng. '[\\]' sẽ là dấu gạch chéo ngược trong một lớp ký tự. một lớp char đơn giản là vô nghĩa, nó sẽ không khác gì so với việc chỉ có một '\\\ 'trần. –