Bộ ký tự trong biểu thức chính quy PHP
Các nhóm ký tự \d và \w không
linh hoạt lắm. Ngay cả một nhiệm vụ đơn giản,
như tìm tất cả các chữ cái, nhưng không phải chữ số -
cũng không thể được giải quyết bằng chúng. Đối với những nhiệm vụ như vậy
nên sử dụng dấu ngoặc vuông, đại diện
cho phép toán HOẶC.
Dấu ngoặc vuông thay thế cho một ký tự,
bất kỳ ký tự nào được liệt kê bên trong. Ví dụ,
như thế này: #x[abc]x# - chúng ta nói rằng
ở hai bên phải là chữ x, và ở giữa
- một ký tự: hoặc 'a', hoặc 'b',
hoặc 'c'.
Sau dấu ngoặc vuông có thể viết các toán tử
lặp lại. Ví dụ, như thế này: #x[abc]+x#
- chúng ta nói rằng giữa các chữ x có thể có
bất kỳ số lượng ký tự nào 'a', 'b'
và 'c' - với bất kỳ sự kết hợp nào.
Không chỉ liệt kê các ký tự, mà còn có thể tạo ra
các nhóm ký tự, bằng cách viết một dấu gạch ngang
giữa hai ký tự. Ví dụ, như thế này: #[a-d]#
- chúng ta nhận được tất cả các ký tự từ 'a' đến
'd'.
Hãy xem các ví dụ.
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như sau:
giữa các chữ x là bất kỳ chữ cái nào từ 'a'
đến 'z':
<?php
$str = 'xax xbx xcx x@x';
$res = preg_replace('#x[a-z]x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! ! ! x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như sau:
giữa các chữ x là bất kỳ chữ cái nào từ 'a'
đến 'k':
<?php
$str = 'xax xbx xmx x@x';
$res = preg_replace('#x[a-k]x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! ! xmx x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như sau:
giữa các chữ x là bất kỳ chữ cái nào từ 'A'
đến 'Z':
<?php
$str = 'xax xBx xcx x@x';
$res = preg_replace('#x[A-Z]x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'xax ! xcx x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như sau:
giữa các chữ x là bất kỳ chữ số nào từ 0 đến 9:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[0-9]x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'xax ! ! ! x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như sau:
giữa các chữ x là bất kỳ chữ số nào từ 3 đến 7:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[3-7]x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'xax x1x ! ! x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như sau:
giữa các chữ x là bất kỳ chữ cái nào từ 'a'
đến 'z' hoặc chữ số từ 1 đến 9:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[a-z1-9]x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! ! ! ! x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như sau:
giữa các chữ x là bất kỳ chữ cái nào từ 'a'
đến 'z' hoặc chữ cái từ 'A' đến
'Z':
<?php
$str = 'xax xBx xcx x5x x@x';
$res = preg_replace('#x[a-zA-Z]x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! ! ! x5x x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như sau:
giữa các chữ x là bất kỳ chữ cái nào từ 'a'
đến 'z' hoặc các chữ số 1, 2:
<?php
$str = 'xax xbx x1x x2x x3x';
$res = preg_replace('#x[a-z12]x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! ! ! ! x3x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như sau:
giữa các chữ x là các chữ cái từ 'a' đến 'z'
với số lượng từ 1 trở lên:
<?php
$str = 'xx xabesx xaadx x123x xa3x';
$res = preg_replace('#x[a-z]+x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'xx ! ! ! x123x xa3x'
Ví dụ
Hãy làm sao cho số lượng chữ cái có thể là 0:
<?php
$str = 'xx xabesx xaadx x123x xa3x';
$res = preg_replace('#x[a-z]*x#', '!', $str);
?>
Kết quả, biến sẽ ghi lại như sau:
'! ! ! x123x xa3x'
Bài tập thực hành
Cho một chuỗi:
<?php
$str = 'aba aea aca aza axa';
?>
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai đầu là chữ 'a',
và giữa chúng - chữ 'b', 'e'
hoặc 'x'.
Cho một chuỗi:
<?php
$str = 'a1a a3a a7a a9a aba';
?>
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai đầu là chữ 'a',
và giữa chúng - chữ số từ 3 đến 6.
Cho một chuỗi:
<?php
$str = 'aba aea afa aha aga';
?>
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai đầu là chữ 'a',
và giữa chúng - chữ cái từ a đến g.
Cho một chuỗi:
<?php
$str = 'aba aea afa aha aga';
?>
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai đầu là chữ 'a',
và giữa chúng - chữ cái từ a đến f và từ j đến z.
Cho một chuỗi:
<?php
$str = 'aAa aea aEa aJa a3a';
?>
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai đầu là chữ 'a',
và giữa chúng - chữ cái từ a đến f và từ A đến D.
Cho một chuỗi:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai đầu là chữ 'a',
và giữa chúng - chữ cái Latinh viết thường,
không ảnh hưởng đến phần còn lại.
Cho một chuỗi:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai đầu là chữ 'a',
và giữa chúng - chữ cái Latinh viết thường và viết hoa, không ảnh hưởng đến phần còn lại.
Cho một chuỗi:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai đầu là chữ 'a',
và giữa chúng - chữ cái Latinh viết thường
và chữ số, không ảnh hưởng đến phần còn lại.