Kết hợp regex PHP

PHP hỗ trợ các biểu thức chính quy thông qua việc sử dụng thư viện PCRE (Biểu thức chính quy tương thích Perl) được kích hoạt trong hầu hết các cài đặt PHP. Khi gọi bất kỳ phương thức nào bên dưới, PHP yêu cầu mỗi mẫu bắt đầu và kết thúc bằng cùng một dấu phân cách để phân biệt nó với một chuỗi bình thường, với dấu phân cách phổ biến nhất là ký tự gạch chéo lên phía trước

Ví dụ: bạn sẽ viết biểu thức chính quy "\w+" thành "/\w+/" trong PHP để biểu thị một biểu thức khớp với một hoặc nhiều ký tự chữ và số

Phù hợp với một chuỗi

Trong PHP, bạn có thể sử dụng hàm preg_match() để kiểm tra xem một biểu thức chính quy có khớp với một chuỗi cụ thể hay không. Lưu ý rằng hàm này dừng sau lần khớp đầu tiên, vì vậy, hàm này phù hợp nhất để kiểm tra biểu thức chính quy hơn là trích xuất dữ liệu

Phương pháp

$has_matches = preg_match($pattern, $input_str, $matches_out)

Thí dụ

// Lets use a regular expression to match a date string. Ignore // the output since we are just testing if the regex matches. $regex = "/[a-zA-Z]+ \d+/"; if (preg_match($regex, "June 24")) { // Indeed, the expression "[a-zA-Z]+ \d+" matches the date string echo "Found a match!"; } else { // If preg_match() returns false, then the regex does not // match the string echo "The regex pattern does not match. :("; }

Chụp nhóm

Không giống như hàm preg_match() ở trên, chúng ta có thể sử dụng hàm preg_match_all() để thực hiện tìm kiếm toàn bộ chuỗi đầu vào. Nếu preg_match_all() trả về true, thì bạn có thể lặp lại mảng được chỉ định bởi $matches_out

Phương pháp

$has_matches = preg_match_all($pattern, $input_str, $matches_out)

Thí dụ

"/\w+/"0

Tìm và thay thế chuỗi

Đôi khi, thật tiện lợi khi tìm và thay thế một chuỗi bằng cách sử dụng các biểu thức thông thường, chẳng hạn như để thay thế tất cả các trường hợp của một miền email cũ bằng một miền mới hoặc để hoán đổi thứ tự của một số văn bản. Bạn có thể làm điều này với chức năng "/\w+/"1

Biểu thức chính quy thường được gọi là biểu thức chính quy (regex) là một chuỗi ký tự mô tả một mẫu tìm kiếm đặc biệt ở dạng chuỗi văn bản. Về cơ bản, chúng được sử dụng trong các thuật toán thế giới lập trình để khớp một số mẫu được xác định lỏng lẻo để đạt được một số nhiệm vụ có liên quan. Đôi khi biểu thức chính quy được hiểu là ngôn ngữ lập trình nhỏ với ký hiệu mẫu cho phép người dùng phân tích chuỗi văn bản. Trình tự chính xác của các ký tự là không thể đoán trước, do đó, biểu thức chính quy giúp tìm nạp các chuỗi cần thiết dựa trên định nghĩa mẫu

Biểu thức chính quy là một cách nhỏ gọn để mô tả một mẫu chuỗi khớp với một lượng văn bản cụ thể. Như bạn đã biết, PHP là ngôn ngữ mã nguồn mở thường được sử dụng để tạo trang web, nó cung cấp các hàm biểu thức chính quy như một công cụ quan trọng. Giống như PHP, nhiều ngôn ngữ lập trình khác có cách triển khai biểu thức chính quy của riêng chúng. Điều này cũng tương tự với các ứng dụng khác, có hỗ trợ biểu thức chính quy riêng có nhiều cú pháp khác nhau. Nhiều ngôn ngữ và công cụ hiện đại có sẵn áp dụng biểu thức chính quy trên các tệp và chuỗi rất lớn. Chúng ta hãy xem xét một số ưu điểm và cách sử dụng biểu thức chính quy trong các ứng dụng của chúng ta

Ưu điểm và cách sử dụng biểu thức chính quy
Trong nhiều tình huống, các nhà phát triển gặp phải sự cố bất cứ khi nào dữ liệu được thu thập trong các trường văn bản tự do vì hầu hết các chương trình xử lý các mục nhập dữ liệu. Biểu thức chính quy được sử dụng hầu hết mọi nơi trong lập trình ứng dụng ngày nay

  • Các biểu thức chính quy giúp xác thực các chuỗi văn bản mà lập trình viên quan tâm
  • Nó cung cấp một công cụ mạnh mẽ để phân tích, tìm kiếm một mẫu và sửa đổi dữ liệu văn bản
  • Nó giúp tìm kiếm mẫu chuỗi cụ thể và trích xuất kết quả phù hợp một cách linh hoạt
  • Nó giúp phân tích các tệp văn bản tìm kiếm một chuỗi ký tự xác định để phân tích thêm hoặc thao tác dữ liệu
  • Với sự trợ giúp của các chức năng biểu thức chính quy được xây dựng, các giải pháp dễ dàng và đơn giản được cung cấp để xác định các mẫu
  • Nó tiết kiệm rất nhiều thời gian phát triển một cách hiệu quả, đó là tìm kiếm mẫu chuỗi cụ thể
  • Nó giúp xác thực thông tin quan trọng của người dùng như địa chỉ email, số điện thoại và địa chỉ IP
  • Nó giúp làm nổi bật các từ khóa đặc biệt trong một tệp dựa trên kết quả tìm kiếm hoặc đầu vào
  • Nó giúp xác định các thẻ mẫu cụ thể và thay thế những dữ liệu đó bằng dữ liệu thực tế theo yêu cầu
  • Regex rất hữu ích để tạo các thẻ nhận dạng hệ thống mẫu HTML
  • Regex chủ yếu được sử dụng để phát hiện trình duyệt, lọc thư rác, kiểm tra độ mạnh của mật khẩu và xác thực biểu mẫu

Chúng tôi không thể đề cập đến mọi thứ trong chủ đề này, nhưng chúng ta hãy xem xét một số khái niệm biểu thức chính quy chính. Bảng sau đây hiển thị một số biểu thức chính quy và chuỗi tương ứng khớp với mẫu biểu thức chính quy

Cụm từ thông dụngMatchesgeeksChuỗi “geeks”^geeksChuỗi bắt đầu bằng “geeks”geeks$Chuỗi có “geeks” ở cuối. ^geeks$Chuỗi trong đó “geeks” đứng một mình trên một chuỗi. [abc]a, b, or c[a-z]Bất kỳ chữ thường nào[^A-Z]Bất kỳ chữ nào KHÔNG phải là chữ in hoa(gif. png)Hoặc “gif” hoặc “png”[a-z]+Một hoặc nhiều chữ cái viết thường^[a-zA-Z0-9]{1, }$Bất kỳ từ nào có ít nhất một số hoặc một chữ cái([ax])( . [0-9]{5})Khớp ba chữ cái hoặc năm số

Ghi chú. Có thể tạo các mẫu tìm kiếm phức tạp bằng cách áp dụng một số quy tắc biểu thức chính quy cơ bản. Thậm chí nhiều toán tử số học như +, ^, – được sử dụng bởi các biểu thức chính quy để tạo các mẫu phức tạp nhỏ

Toán tử trong biểu thức chính quy. Chúng ta hãy xem xét một số toán tử trong biểu thức chính quy PHP

OperatorDescription^Nó biểu thị sự bắt đầu của chuỗi. $Nó biểu thị phần cuối của chuỗi. Nó biểu thị hầu hết mọi ký tự đơn lẻ. () Nó biểu thị một nhóm các biểu thức. []Nó tìm thấy một loạt các ký tự ví dụ [xyz] có nghĩa là x, y hoặc z. [^]Nó tìm các mục không nằm trong phạm vi, ví dụ [^abc] có nghĩa là KHÔNG a, b hoặc c. – (dấu gạch ngang) Nó tìm phạm vi ký tự trong phạm vi mục đã cho, ví dụ [a-z] có nghĩa là từ a đến z. (pipe)Đó là logic OR ví dụ x. y nghĩa là x HOẶC y. ?Nó biểu thị số không hoặc một trong các ký tự hoặc phạm vi mục trước đó. * Nó biểu thị không hoặc nhiều ký tự hoặc phạm vi mục trước đó. +Nó biểu thị một hoặc nhiều ký tự hoặc phạm vi mục trước đó. {n}Nó biểu thị chính xác n lần phạm vi mục hoặc ký tự trước đó, ví dụ n{2}. {n, }Nó biểu thị ít nhất n lần phạm vi ký tự hoặc mục trước đó, ví dụ n{2, }. {n, m}Nó biểu thị ít nhất n nhưng không quá m lần, ví dụ n{2, 4} có nghĩa là 2 đến 4 của n. \Nó biểu thị ký tự thoát

Các lớp ký tự đặc biệt trong biểu thức chính quy. Chúng ta hãy xem xét một số ký tự đặc biệt được sử dụng trong biểu thức chính quy

Ký tự đặc biệtÝ nghĩa\nNó biểu thị một dòng mới. \rNó biểu thị một sự trở lại vận chuyển. \tNó biểu thị một tab. \vNó biểu thị một tab dọc. \fNó biểu thị một nguồn cấp dữ liệu biểu mẫu. \xxxNó biểu thị ký tự bát phân xxx. \xhhNó biểu thị ký tự hex hh

Bộ ký tự tốc ký. Chúng ta hãy xem xét một số bộ ký tự tốc ký có sẵn

ShorthandMeaning\sKhớp các ký tự khoảng trắng như dấu cách, dòng mới hoặc tab. \dKhớp với bất kỳ chữ số nào từ 0 đến 9. \wKhớp các ký tự từ bao gồm tất cả chữ thường và chữ hoa, chữ số và dấu gạch dưới

Các chức năng được xác định trước hoặc thư viện Regex. Chúng ta hãy xem bảng tóm tắt nhanh về các hàm được xác định trước cho các biểu thức chính quy trong PHP. PHP cung cấp cho người lập trình nhiều hàm hữu ích để làm việc với biểu thức chính quy

Các hàm dựng sẵn được liệt kê bên dưới phân biệt chữ hoa chữ thường

FunctionDefinitionpreg_match() Hàm này tìm kiếm một mẫu cụ thể đối với một số chuỗi. Nó trả về true nếu mẫu tồn tại và sai nếu không. preg_match_all() Hàm này tìm kiếm tất cả các lần xuất hiện của mẫu chuỗi so với chuỗi. Chức năng này rất hữu ích cho việc tìm kiếm và thay thế. ereg_replace() Hàm này tìm kiếm mẫu chuỗi cụ thể và thay thế chuỗi gốc bằng chuỗi thay thế, nếu tìm thấy. eregi_replace() Hàm hoạt động giống như ereg_replace() miễn là tìm kiếm mẫu không phân biệt chữ hoa chữ thường. preg_replace() Hàm này hoạt động giống như hàm ereg_replace() miễn là các biểu thức chính quy có thể được sử dụng trong mẫu và chuỗi thay thế. preg_split() Hàm này hoạt động giống như hàm split() của PHP. Nó phân tách chuỗi bằng các biểu thức chính quy làm tham số của nó. preg_grep()Hàm này tìm kiếm tất cả các phần tử khớp với mẫu biểu thức chính quy và trả về mảng đầu ra. preg_quote() Hàm này lấy chuỗi và dấu ngoặc kép ở phía trước mỗi ký tự khớp với biểu thức chính quy. ereg() Hàm này tìm kiếm một chuỗi được chỉ định bởi một mẫu và trả về true nếu tìm thấy, nếu không thì trả về false. eregi() Hàm này hoạt động giống như hàm ereg() miễn là tìm kiếm không phân biệt chữ hoa chữ thường

Ghi chú

  • Theo mặc định, biểu thức chính quy phân biệt chữ hoa chữ thường
  • Có sự khác biệt giữa chuỗi bên trong dấu ngoặc đơn và chuỗi bên trong dấu ngoặc kép trong PHP. Cái trước được xử lý theo nghĩa đen, trong khi đối với các chuỗi bên trong dấu ngoặc kép có nghĩa là nội dung của biến được in thay vì chỉ in tên của chúng

ví dụ 1




 

// Declare a regular expression

$regex ='/^[a-zA-Z ]*$/';

 

John
Developer
0

John
Developer
1 =
John
Developer
3;

 

John
Developer
5

John
Developer
6

John
Developer
7
John
Developer
8$regex
Completed graduation in 2002
0
John
Developer
1
Completed graduation in 2002
2

Completed graduation in 2002
3_______7_______4_______7_______5
Completed graduation in 2002
6

Completed graduation in 2002
7
Completed graduation in 2002
8
Completed graduation in 2002
9
134
645
478
670
0

134
645
478
670
1

134
645
478
670
2
134
645
478
670
3

Completed graduation in 2002
3_______7_______4
Completed graduation in 2002
5
134
645
478
670
7

Completed graduation in 2002
7
Completed graduation in 2002
80
134
645
478
670
0

134
645
478
670
1

 

3

đầu ra

Name string matching with regular expression

ví dụ 2




 

// Declare a regular expression

$regex =8;

 

John
Developer
0

// Declare a regular expression1 =// Declare a regular expression3;

 

// Declare a regular expression5

// Declare a regular expression6

// Declare a regular expression7$regex

Completed graduation in 2002
0// Declare a regular expression1
Completed graduation in 2002
0$regex2
134
645
478
670
0

 

Completed graduation in 2002
4 $regex2$regex6$regex7_______7_______8$regex2=0=1;

 

3

đầu ra

John
Developer

ví dụ 3




 

// Declare a regular expression

$regex ==8;

 

John
Developer
0

'/^[a-zA-Z ]*$/'1 ='/^[a-zA-Z ]*$/'3;

'/^[a-zA-Z ]*$/'5 ='/^[a-zA-Z ]*$/'7;

'/^[a-zA-Z ]*$/'9

;0

;1

'/^[a-zA-Z ]*$/'1 =___;4_______7_______5$regex7_______0'/^[a-zA-Z ]*$/'5

Completed graduation in 2002
0'/^[a-zA-Z ]*$/'1
134
645
478
670
0

Completed graduation in 2002
3

John
Developer
03

Completed graduation in 2002
4 '/^[a-zA-Z ]*$/'1;

'/^[a-zA-Z ]*$/'9

3

đầu ra

Completed graduation in 2002

Ví dụ 4




 

John
Developer
0

John
Developer
12 =
John
Developer
14;

 

// Declare a regular expression

$regex =

John
Developer
19;

 

John
Developer
21

John
Developer
22

John
Developer
23

$regex2

John
Developer
25$regex
Completed graduation in 2002
0
John
Developer
12
134
645
478
670
0

 

Completed graduation in 2002
4
John
Developer
31;

Completed graduation in 2002
4
John
Developer
34;

Completed graduation in 2002
4
John
Developer
37;

Completed graduation in 2002
4
John
Developer
40;

 

3

đầu ra

134
645
478
670

Siêu ký tự. Có hai loại ký tự được sử dụng trong biểu thức chính quy, đó là. Ký tự thông thường và Siêu ký tự. Ký tự thông thường là những ký tự có nghĩa 'theo nghĩa đen' và Siêu ký tự là những ký tự có nghĩa 'đặc biệt' trong biểu thức chính quy

Siêu ký tựMô tảVí dụ. Nó khớp với bất kỳ ký tự đơn nào ngoài một dòng mới. /. / so khớp với chuỗi có một ký tự. ^Nó khớp với phần đầu của chuỗi. /^geeks/ khớp với bất kỳ chuỗi nào bắt đầu bằng geeks. $Nó khớp với mẫu chuỗi ở cuối chuỗi. /com$/ khớp với chuỗi kết thúc bằng com chẳng hạn google. com vv. * Nó khớp với 0 hoặc nhiều ký tự. /com*/ phù hợp với đường đi làm, máy tính, thỏa hiệp, v.v. +Nó khớp với ký tự đứng trước xuất hiện ít nhất một lần. Ví dụ: /z+oom/ phù hợp với thu phóng. \Nó được sử dụng để thoát khỏi các siêu ký tự trong regex. /Google\. com/ sẽ coi dấu chấm là một giá trị theo nghĩa đen, không phải ký tự đại diện. a-zNó khớp với chữ thường. chuyên viên máy tính A-ZIt khớp với chữ in hoa. GEEKS0-9Nó khớp với bất kỳ số nào trong khoảng từ 0 đến 9. /0-5/ khớp với 0, 1, 2, 3, 4, 5[…]Nó khớp với lớp ký tự. /[pqr]/ khớp với pqr

Những ví dụ khác

Cụm từ thông dụng Ý nghĩa^[. -a-z0-9A-Z]Nó khớp với chuỗi có dấu chấm, dấu gạch ngang và bất kỳ chữ cái viết thường nào, số từ 0 đến 9 và chữ cái viết hoa. +@[a-z0-9A-Z]Nó khớp với chuỗi có ký hiệu @ ở đầu, theo sau là bất kỳ chữ cái viết thường nào, số từ 0 đến 9 và chữ cái viết hoa. +\. [a-z]{2, 6}$/Nó thoát khỏi dấu chấm và sau đó khớp chuỗi với bất kỳ chữ cái viết thường nào có độ dài chuỗi từ 2 đến 6 ở cuối

Ghi chú

  • Siêu ký tự rất mạnh trong các giải pháp khớp mẫu biểu thức chính quy. Nó xử lý rất nhiều xử lý mẫu phức tạp
  • Mỗi ký tự không phải là siêu ký tự chắc chắn là một ký tự thông thường
  • Mỗi ký tự thông thường tự khớp với cùng một ký tự

Biểu thức chính quy POSIX. Một số biểu thức chính quy trong PHP giống như biểu thức số học được gọi là biểu thức chính quy POSIX. Đôi khi, biểu thức phức tạp được tạo bằng cách kết hợp các phần tử hoặc toán tử khác nhau trong biểu thức chính quy. Regex rất cơ bản là cái khớp với một ký tự

Hãy xem xét một số biểu thức chính quy POSIX

RegexMeaning[0-9]Nó khớp với chữ số từ 0 đến 9. [a-z]Nó khớp với bất kỳ chữ cái viết thường nào từ a đến z. [A-Z]Nó khớp với bất kỳ chữ cái viết hoa nào từ A đến Z. [a-Z]Nó khớp với mọi chữ cái viết thường từ a đến chữ cái viết hoa Z. [. thấp hơn. ] Nó khớp với bất kỳ chữ cái viết thường nào. [. phía trên. ] Nó khớp với bất kỳ chữ cái viết hoa nào. [. chữ cái. ] Nó khớp với tất cả các ký tự chữ cái hoặc chữ cái từ a-z và A-Z. [[. chữ cái. ]]Nó khớp với bất kỳ chuỗi nào chứa các ký tự chữ cái hoặc chữ cái. [. hàng năm. ] Nó khớp với tất cả các ký tự chữ và số i. e tất cả các chữ số (0-9) và chữ cái (a-z A-Z). [[. hàng năm. ]]Nó khớp với bất kỳ chuỗi nào chứa ký tự chữ và số và chữ số. [. chữ số. ] Nó khớp với tất cả các chữ số từ 0 đến 9. [[. chữ số. ]]Nó khớp với bất kỳ chuỗi nào chứa các chữ số từ 0 đến 9. [. x chữ số. ] Nó khớp với tất cả các chữ số thập lục phân. [. dấu câu. ] Nó khớp với tất cả các ký hiệu dấu chấm câu. [. trống. ] Nó khớp với các ký tự trống như dấu cách và tab. [. không gian. ] Nó khớp với tất cả các ký tự khoảng trắng như ngắt dòng. [[. không gian. ]]Nó khớp với bất kỳ chuỗi nào chứa khoảng trắng. [. cntrl. ] Nó khớp với tất cả các ký tự điều khiển. [. đồ thị. ] Nó khớp với tất cả các ký tự hiển thị hoặc in ngoài khoảng trắng và ký tự điều khiển. [. in. ] Nó khớp với tất cả các ký tự in và khoảng trắng ngoài các ký tự điều khiển. [. từ. ] Nó khớp với tất cả các ký tự từ như chữ số, chữ cái và dấu gạch dưới

Định lượng trong biểu thức chính quy. Lượng từ là các ký tự đặc biệt cho biết số lượng, tần suất hoặc số lần xuất hiện hoặc xuất hiện của ký tự hoặc nhóm ký tự trong ngoặc đơn. Chúng còn được gọi là biểu hiện tham lam và lười biếng. Chúng ta hãy xem xét một số khái niệm và ví dụ về lượng từ

QuantifierMeaninga+Nó khớp với chuỗi chứa ít nhất một a. a*Nó khớp với chuỗi chứa 0 hoặc nhiều hơn a. a? Nó khớp với bất kỳ chuỗi nào chứa 0 hoặc 1 a. a{x}Nó khớp chữ cái 'a' chính xác x lần. a{2, 3}Nó khớp với bất kỳ chuỗi nào có sự xuất hiện của hai hoặc ba chữ a. a{2, }Nó khớp với bất kỳ chuỗi nào chứa ít nhất hai chữ a. a{2}Nó khớp với bất kỳ chuỗi nào chứa chính xác hai chữ số a. a{, y}Nó khớp với bất kỳ chuỗi nào chứa số lần xuất hiện không quá y của a. a$Nó khớp với bất kỳ chuỗi nào có 'a' ở cuối chuỗi. ^aNó khớp với bất kỳ chuỗi nào có 'a' ở đầu chuỗi. [^a-zA-Z]Nó khớp với bất kỳ mẫu chuỗi nào không có các ký tự từ a đến z và A đến Z. a. aNó khớp với bất kỳ mẫu chuỗi nào chứa a, sau đó là bất kỳ ký tự nào và sau đó là ký tự a khác. ^. {3}$Nó khớp với bất kỳ chuỗi nào có chính xác ba ký tự

Ghi chú

  • Ký tự $ bên trong biểu thức sẽ khớp với phần cuối của chuỗi đích
  • Các ký hiệu *, ?, + trong biểu thức chính quy biểu thị tần suất xuất hiện của một ký tự. Nếu nó xảy ra không hoặc nhiều lần, không hoặc một lần và một hoặc nhiều lần
  • Ký tự ^ bên trong biểu thức sẽ khớp với phần đầu của chuỗi đích
  • Các. metacharacter khớp với bất kỳ ký tự đơn nào ngoài dòng mới

Các công cụ biểu thức chính quy thường được biết đến

  • biểu thức chính quy
  • RegexBuddy

Phần kết luận. Biểu thức chính quy là một mẫu mô tả một số văn bản chuỗi trong một mẫu cụ thể hoặc nó được định nghĩa là một thuật toán so khớp mẫu được biểu thị trong một dòng. Biểu thức chính quy rất hữu ích trong thế giới lập trình để kiểm tra xác thực và nhận dạng các mẫu cụ thể. PHP cung cấp nhiều hàm dựng sẵn hỗ trợ các biểu thức chính quy. Siêu ký tự giúp tạo các mẫu phức tạp

Làm cách nào để kiểm tra đối sánh regex trong PHP?

Trong PHP, bạn có thể sử dụng hàm preg_match() để kiểm tra xem một biểu thức chính quy có khớp với một chuỗi cụ thể hay không. Lưu ý rằng hàm này dừng sau lần khớp đầu tiên, vì vậy, hàm này phù hợp nhất để kiểm tra biểu thức chính quy hơn là trích xuất dữ liệu.

Làm cách nào để so sánh regex trong PHP?

Sử dụng hàm preg_match() Hàm preg_match() sẽ cho bạn biết liệu một chuỗi có chứa các kết quả khớp của một mẫu hay không. .
Sử dụng preg_match_all() Hàm preg_match_all() sẽ cho bạn biết có bao nhiêu kết quả tìm thấy cho một mẫu trong một chuỗi. .
Sử dụng preg_replace().
nhóm

Làm cách nào để lấy chuỗi khớp trong PHP?

preg_match() trong PHP – hàm này được sử dụng để thực hiện khớp mẫu trong PHP trên một chuỗi. Nó trả về true nếu tìm thấy kết quả khớp và sai nếu không tìm thấy kết quả khớp. preg_replace() trong PHP – hàm này được sử dụng để thực hiện khớp mẫu trên một chuỗi và sau đó thay thế khớp bằng văn bản đã chỉ định.

Làm cách nào để thêm Preg_match trong PHP?