Ký tự đặc biệt trong biểu thức chính quy PHP
Giả sử chúng ta muốn một ký tự đặc biệt biểu thị chính nó. Để làm được điều này, cần phải sử dụng dấu gạch chéo ngược để thoát nó. Hãy xem qua các ví dụ.
Ví dụ
Trong ví dụ tiếp theo, tác giả của biểu thức chính quy muốn
mẫu tìm kiếm trông như thế này: chữ cái
'a', sau đó dấu cộng '+', sau đó
chữ cái 'x'. Tuy nhiên, tác giả của mã
không thoát ký tự '+' và do đó
mẫu tìm kiếm thực sự trông như thế này:
chữ cái 'a' một hoặc nhiều lần, sau đó
chữ cái 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Kết quả trong biến sẽ là:
'a+x ! ! !'
Ví dụ
Bây giờ tác giả đã thoát dấu cộng bằng
dấu gạch chéo ngược. Bây giờ mẫu tìm kiếm trông như thế này,
như mong muốn: chữ cái 'a', sau đó dấu cộng
'+', sau đó chữ cái 'x'.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Kết quả trong biến sẽ là:
'! ax aax aaax'
Ví dụ
Trong ví dụ này, mẫu trông như thế này: chữ cái
'a', sau đó dấu chấm '.', sau đó
chữ cái 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Kết quả trong biến sẽ là:
'! abx azx'
Ví dụ
Trong ví dụ tiếp theo, tác giả quên thoát dấu chấm và biểu thức chính quy khớp với tất cả các chuỗi con, vì dấu chấm không được thoát biểu thị bất kỳ ký tự nào:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Kết quả trong biến sẽ là:
'! ! !'
Ví dụ
Chú ý rằng nếu bạn quên dấu gạch chéo ngược cho dấu chấm (khi nó phải biểu thị chính nó) - điều này thậm chí có thể không được chú ý:
<?php
preg_replace('#a.x#', '!', 'a.x'); // trả về '!', như chúng ta mong muốn
?>
Trực quan, nó hoạt động chính xác (vì dấu chấm
biểu thị bất kỳ ký tự nào, bao gồm cả dấu chấm thông thường
'.'). Nhưng nếu thay đổi chuỗi,
trong đó diễn ra việc thay thế - chúng ta sẽ thấy
lỗi của mình:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // trả về '! ! !', trong khi mong đợi '! abx azx'
?>