Các nhóm ký tự trong biểu thức chính quy PHP
Tồn tại các lệnh đặc biệt cho phép chọn ngay lập tức toàn bộ nhóm ký tự. Lệnh
\d có nghĩa là chữ số từ 0 đến 9.
Lệnh \w biểu thị chữ số, chữ cái Latinh
hoặc dấu gạch dưới. Lệnh \s
biểu thị dấu cách hoặc ký tự khoảng trắng:
dấu cách, xuống dòng, tab. Có thể
đảo ngược giá trị của lệnh bằng cách viết hoa
chữ cái: ví dụ, nếu \d - là chữ số,
thì \D - là không phải chữ số.
Ví dụ
Hãy tìm tất cả các chữ số:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! !! !!!'
Ví dụ
Các toán tử lặp lại coi các lệnh-nhóm là
một thể thống nhất, tức là dấu ngoặc nhóm
không cần thiết. Trong ví dụ tiếp theo, mẫu tìm kiếm
trông như thế này: chữ số từ 0 đến 9
một hoặc nhiều lần:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! ! ! abc @@@'
Ví dụ
Trong ví dụ tiếp theo, mẫu tìm kiếm trông
như thế này: bất cứ thứ gì một hoặc nhiều lần,
nhưng không phải chữ số từ 0 đến 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'123!3!'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như thế này: ký tự khoảng trắng một lần:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'1!12!123!abc!@@@'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như thế này:
KHÔNG phải ký tự khoảng trắng một hoặc nhiều lần.
Tất cả các chuỗi con, được phân tách bằng dấu cách, sẽ được thay thế
bằng '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! ! ! ! !'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như thế này:
chữ số hoặc chữ cái một hoặc nhiều lần.
Tất cả các chuỗi con, bao gồm chữ số và chữ cái,
sẽ được thay thế bằng '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! ! ! ! @@@'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như thế này:
KHÔNG phải chữ số và KHÔNG phải chữ cái một hoặc nhiều lần.
Theo định nghĩa này, trong trường hợp của chúng ta sẽ bao gồm
'@@@' và tất cả các dấu cách (chúng cũng
không phải chữ số và không phải chữ cái). Hãy chú ý đến
việc cuối cùng có một '!' - nó được
chuyển đổi từ chuỗi ' @@@' - với
dấu cách ở phía trước:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Kết quả, biến sẽ ghi lại như sau:
'1!12!123!Abc!'
Bài tập thực hành
Cho chuỗi:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Viết biểu thức chính quy tìm các chuỗi,
trong đó ở hai bên là các chữ cái 'a',
và giữa chúng là một chữ số.
Cho chuỗi:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Viết biểu thức chính quy tìm các chuỗi,
trong đó ở hai bên là các chữ cái 'a',
và giữa chúng là bất kỳ số lượng chữ số nào.
Cho chuỗi:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Viết biểu thức chính quy tìm các chuỗi,
trong đó ở hai bên là các chữ cái 'a',
và giữa chúng là bất kỳ số lượng chữ số nào (bao gồm
cả số không chữ số, tức là chuỗi 'aa').
Cho chuỗi:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Viết biểu thức chính quy tìm các chuỗi
có dạng sau: ở hai bên là các chữ cái
'a' và 'b', và giữa chúng - không phải
số.
Cho chuỗi:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Viết biểu thức chính quy tìm các chuỗi
có dạng sau: ở hai bên là các chữ cái
'a' và 'b', và giữa chúng - không phải
chữ cái và không phải chữ số.
Cho chuỗi:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Viết biểu thức chính quy thay thế tất cả các dấu cách
bằng '!'.