⊗ppPmRgSHy 238 of 447 menu

Dấu gạch ngang bên trong bộ ký tự trong regex PHP

Dấu gạch ngang - cũng là một ký tự đặc biệt bên trong [] (còn bên ngoài - thì không). Nếu bạn cần chính dấu gạch ngang như một ký tự - hãy đặt nó ở nơi nó sẽ không bị hiểu là dấu phân cách nhóm.

Tại sao điều này quan trọng: bạn có thể tạo ra một nhóm ký tự mà không hề nhận ra. Ví dụ, như thế này - [:-@] - bạn nghĩ rằng bạn đang chọn dấu hai chấm, dấu gạch ngang và dấu @, nhưng thực tế lại trở thành một nhóm ký tự giữa :@. Nhóm này bao gồm các ký tự sau: :, ;, ?, <, =, >.

Chúng từ đâu ra? Từ bảng ASCII - dấu hai chấm có số thứ tự nhỏ hơn dấu @ - và kết quả là một nhóm. Tức là tất cả các nhóm được hình thành dựa trên bảng ASCII (nếu muốn bạn có thể tận dụng điều này).

Cách xử lý: đặt ký tự dấu gạch ngang ở nơi nó chắc chắn sẽ không bị hiểu là ký tự nhóm, ví dụ, ở đầu hoặc ở cuối (tức là sau [ hoặc trước ]).

Cũng có thể thoát dấu gạch ngang - khi đó nó sẽ đại diện cho chính nó bất kể vị trí. Ví dụ, thay vì [:-@] hãy viết [:\-@] - và sẽ không có nhóm nữa, mà sẽ là ba ký tự - dấu hai chấm, dấu gạch ngang và dấu @.

Ví dụ

Trong ví dụ tiếp theo, mẫu tìm kiếm như sau: chữ số 1, sau đó là chữ cái từ 'a' đến 'z', sau đó là chữ số 2:

<?php $str = '1a2 1-2 1c2 1z2'; $res = preg_replace('#1[a-z]2#', '!', $str); ?>

Kết quả, biến sẽ ghi lại nội dung sau:

'! 1-2 ! !'

Ví dụ

Bây giờ hãy thoát dấu gạch ngang. Kết quả mẫu tìm kiếm như sau: chữ số 1, sau đó là chữ cái 'a', hoặc dấu gạch ngang, hoặc chữ cái 'z', sau đó là chữ số 2:

<?php $str = '1a2 1-2 1c2 1z2'; $res = preg_replace('#1[a\-z]2#', '!', $str); ?>

Kết quả, biến sẽ ghi lại nội dung sau:

'! ! 1c2 !'

Ví dụ

Có thể chỉ cần di chuyển dấu gạch ngang, không cần thoát nó:

<?php $str = '1a2 1-2 1c2 1z2'; $res = preg_replace('#1[az-]2#', '!', $str); ?>

Kết quả, biến sẽ ghi lại nội dung sau:

'! ! 1c2 !'

Ví dụ

Trong ví dụ tiếp theo, mẫu tìm kiếm như sau: ký tự đầu tiên - là chữ cái thường hoặc dấu gạch ngang '-', sau đó là hai chữ cái 'x':

<?php $str = 'axx Axx -xx @xx'; $res = preg_replace('#[a-z-]xx#', '!', $str); ?>

Kết quả, biến sẽ ghi lại nội dung sau:

'! Axx ! @xx'

Ví dụ

Trong ví dụ tiếp theo, mẫu tìm kiếm như sau: ký tự đầu tiên - là chữ cái thường, chữ hoa hoặc dấu gạch ngang '-', sau đó là hai chữ cái 'x':

<?php $str = 'axx Axx -xx @xx'; $res = preg_replace('#[a-zA-Z-]xx#', '!', $str); ?>

Kết quả, biến sẽ ghi lại nội dung sau:

'! ! ! @xx'

Ví dụ

Có thể đặt dấu gạch ngang giữa hai nhóm - ở đó nó chắc chắn sẽ không tạo ra thêm một nhóm nữa:

<?php $str = 'axx 9xx -xx @xx'; $res = preg_replace('#[a-z-0-9]xx#', '!', $str); ?>

Kết quả, biến sẽ ghi lại nội dung sau:

'! ! ! @xx'

Bài tập thực hành

Cho chuỗi:

<?php $str = 'xaz xBz xcz x-z x@z'; ?>

Tìm tất cả các chuỗi theo mẫu sau: chữ cái 'x', chữ cái hoa hoặc chữ thường hoặc dấu gạch ngang, chữ cái 'z'.

Cho chuỗi:

<?php $str = 'xaz x$z x-z xcz x+z x%z x*z'; ?>

Tìm tất cả các chuỗi theo mẫu sau: chữ cái 'x', sau đó là dấu đô la, hoặc dấu gạch ngang hoặc dấu cộng, sau đó là chữ cái 'z'.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối