Hàm preg_replace dùng để replace một chuỗi nào đó khớp với đoạn Regular Expression truyền vào. Hàm này có chức năng tương tự như str_replace nhưng có sự khác biệt là một bên dùng regex một bên không dùng.
Cú pháp:
preg_replace ( $pattern, $replacement, $subject)
Trong đó:
- $partern: là chuỗi Regular Expression
- $replacement: là chuỗi replace thành
- $subject: là string muốn duyệt và replace
Kết quả trả về của hàm preg_replace là chuỗi đã được replace
Ví dụ hàm preg_relace
Ví dụ 1: Replace chuỗi
hi
thành chuỗi hello
trong chuỗi hi everybody, hi there
1
2
3
4
| $partern = '/hi/' ; $subject = 'hi everybody, hi there' ; $replacement = 'hello' ; echo preg_replace( $partern , $replacement , $subject ); |
hello everybody, hello there
đã được replace
Ví dụ 2: Xóa thẻ h1 trong chuỗi
<h1>Welcome to freetuts.net</h1>
Nhận xét: Ta thấy để xóa thẻ
h1
thì sẽ phải replace cho cả thẻ đóng </h1>
và thẻ mở <h1>
thành ký tự trống ''
. Ta sẽ có 2 cách xử lý cho bài này.
Cách 1: Dùng toán tử OR trong Regular Expression, tức là sẽ kiểm tra nếu là thẻ đóng hoặc thẻ mở thì sẽ bị replace thành ký tự trống. Chuỗi regex sẽ như sau
$partern = '/(<h1>)|(<\/h1>)/'
. Tôi đã dùng dấu mở và đóng ()
để gộp 2 nhóm thẻ mở và thẻ đóng lại, luôn luôn làm như vậy nha các bạn.
1
2
3
4
| $partern = '/(<h1>)|(<\/h1>)/' ; $subject = '<h1>Welcome to freetuts.net</h1>' ; $replacement = '' ; echo preg_replace( $partern , $replacement , $subject ); |
Cách 2: Dùng toán tử kiểm tra có hoặc không đó là dấu
?
. Bạn quay lại bài trước để xem các ví dụ và cách dùng dấu này nhé.
Các bạn thấy thẻ mở
<h1>
và thẻ đóng </h1>
chỉ khác nhau ở chỗ dấu /
. Như vậy chuỗi partern sẽ như sau$partern = '/(<\/?h1>)/'
. Vì dấu /
là ký tự đặc biệt trong Regular Expression nên tôi đã thêm một dấu \
để đặt trước nó. Những điều này tôi đã nói ở bài trước rồi nên bạn quay lại xem nhé. Dấu ? là có ý nghĩa có hoặc không có ký tự, tức là <h1>
hoặc</h1>
1
2
3
4
| $partern = '/(<\/?h1>)/' ; $subject = '<h1>Welcome to freetuts.net</h1>' ; $replacement = '' ; echo preg_replace( $partern , $replacement , $subject ); |
Ví dụ 3: Dùng Regular Expression xóa tất cả những thẻ html (h1, h2, h3, h4, h5) của một đoạn text
Nếu không dùng hàm preg_replace kết hợp với Regular Expression thì trong php có cung cấp 1 hàm để xử lý vấn đề này, đó là hàmstrip_tags. Nhưng trong đề bài yêu cầu dùng Regular Expresision nên phải làm vậy thôi.
Ý tưởng: Ở ví dụ 2 ta đã xóa được một thẻ h1, như vậy muốn xóa các thẻ khác thì chỉ cần copy và thay đổi giá trị thẻ là được, cách làm như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
| $subject = '<h1>This is h1</h1><h2>This is h2</h2><h3>This is h3</h3><h4>This is h4 </div><h5> This is h5 </h5>' ; // H1 $subject = preg_replace( '/<\/?h1>/' , '' , $subject ); // H2 $subject = preg_replace( '/<\/?h2>/' , '' , $subject ); // H3 $subject = preg_replace( '/<\/?h3>/' , '' , $subject ); // H4 $subject = preg_replace( '/<\/?h4>/' , '' , $subject ); // H5 $subject = preg_replace( '/<\/?h5>/' , '' , $subject ); echo $subject ; |
1
2
| $subject = '<h1>This is h1</h1><h2>This is h2</h2><h3>This is h3</h3><h4>This is h4 </div><h5> This is h5 </h5>' ; echo preg_replace( '/(<\/?h1>)|(<\/?h2>)|(<\/?h3>)|(<\/?h4>)|(<\/?h5>)/' , '' , $subject ); |
1
2
| $subject = '<h1>This is h1</h1><h2>This is h2</h2><h3>This is h3</h3><h4>This is h4 </div><h5> This is h5 </h5>' ; echo preg_replace( '/<\/?h(1|2|3|4|5)>/' , '' , $subject ); |
1 hoặc 2 hoặc 3 hoặc 4 hoặc 5
. Đây là cách gọn và tối ưu nhất đúng không nào.Lời Kết
Qua 3 ví dụ trên chắc hẳn bạn đã biết các sử dụng hàm preg_replace trong php kết hợp với Regular Expression rồi nhỉ. Có rất nhiều bài toán khác nhau và ứng dụng khác nhau nên không thể quy ra một công thức chung được, các bạn cố gắng nắm vững các biểu thức Regular Expression để kết hợp là ok.
Nguồn: (code.freetuts.net)
0 nhận xét: