Biểu thức chính quy php cách tìm thẻ cuối cùng. PHP (biểu thức chính quy) - nó là gì? Ví dụ và kiểm tra biểu thức chính quy

Khi làm việc với văn bản ở bất kỳ ngôn ngữ hiện đại lập trình, các nhà phát triển thường xuyên phải đối mặt với nhiệm vụ kiểm tra tính tuân thủ của dữ liệu đã nhập mẫu cần thiết, tìm kiếm và thay thế các đoạn thử nghiệm và các hoạt động xử lý điển hình khác thông tin tượng trưng. Việc phát triển các thuật toán xác minh của riêng bạn dẫn đến mất thời gian, tính không tương thích của mã chương trình và sự phức tạp trong quá trình phát triển và hiện đại hóa nó.

Sự phát triển nhanh chóng của Internet và các ngôn ngữ phát triển WEB đòi hỏi phải tạo ra các công cụ xử lý phổ quát và nhỏ gọn thông tin văn bản Tại số lượng tối thiểu mã cần thiết cho việc này. Ngôn ngữ PHP, phổ biến với người mới bắt đầu và các nhà phát triển chuyên nghiệp, cũng không ngoại lệ. Biểu thức chính quy như một ngôn ngữ mẫu văn bản cho phép bạn đơn giản hóa các tác vụ xử lý văn bản và giảm mã chương trình xuống hàng chục, hàng trăm dòng. Nhiều vấn đề không thể được giải quyết nếu không có nó.

Biểu thức chính quy trong PHP

Ngôn ngữ PHP chứa ba cơ chế để làm việc với các biểu thức chính quy - “ereg”, “mb_ereg” và “preg”. Phổ biến nhất là giao diện "preg", có chức năng cung cấp quyền truy cập vào thư viện hỗ trợ biểu thức chính quy PCRE, ban đầu được phát triển cho ngôn ngữ Perl, được bao gồm trong PHP. Các hàm Preg tìm kiếm một chuỗi văn bản nhất định để tìm kết quả khớp theo một mẫu cụ thể trong ngôn ngữ biểu thức chính quy.

Cú pháp cơ bản

Không thể mô tả chi tiết toàn bộ cú pháp của biểu thức chính quy trong một bài viết ngắn; có tài liệu đặc biệt về việc này. Chúng tôi chỉ trình bày các yếu tố chính để thể hiện khả năng mở rộng cho nhà phát triển và hiểu các ví dụ về mã.

B được định nghĩa chính thức theo một cách rất phức tạp, vì vậy hãy đơn giản hóa việc mô tả. Biểu thức chính quy là một chuỗi văn bản. Nó bao gồm một mẫu được đánh dấu bằng dấu phân cách và công cụ sửa đổi cho biết cách xử lý mẫu đó. Có thể đưa vào các mẫu lựa chọn thay thế khác nhau và sự lặp lại.

Ví dụ, trong biểu thức /\d(3)-\d(2)-\d(2)/m dải phân cách sẽ là «/» , sau đó đến mẫu và biểu tượng "m" sẽ là một sửa đổi.

Tất cả sức mạnh của biểu thức chính quy được mã hóa bằng siêu ký tự. Siêu ký tự chính của ngôn ngữ là dấu gạch chéo ngược - “\”. Nó đảo ngược kiểu ký tự theo sau nó (tức là, một ký tự thông thường trở thành siêu ký tự và ngược lại). Một siêu ký tự quan trọng khác là dấu gạch chéo lên "|", chỉ định lựa chọn thay thế bản mẫu. Thêm ví dụ về siêu ký tự:

PHP, khi xử lý các biểu thức chính quy, coi các khoảng trắng là riêng biệt biểu tượng quan trọng, do đó các biểu thức ABCWHERE và ABCWHERE là khác nhau.

Mẫu con

Trong PHP, các mẫu con thông thường được phân tách bằng dấu ngoặc đơn và đôi khi được gọi là "biểu thức con". Thực hiện các chức năng sau:

    Làm nổi bật các lựa chọn thay thế. Ví dụ, mẫu nhiệt(thứ gì đó|chim|) phù hợp với các từ "nhiệt", "chim lửa""thịt nướng". Và không có dấu ngoặc đơn thì nó sẽ chỉ là dòng trống, "gia cầm" và "nướng".

    Mẫu phụ "Thú vị".Điều này có nghĩa là nếu một chuỗi con khớp với mẫu thì tất cả các kết quả khớp sẽ được trả về dưới dạng kết quả. Để rõ ràng, hãy đưa ra một ví dụ. Cho biểu thức chính quy sau: người chiến thắng nhận được((vàng|mạ vàng)(huy chương|cốc)) - và một dòng để tìm kết quả phù hợp: "người chiến thắng nhận được huy chương vàng". Ngoài cụm từ ban đầu, kết quả tìm kiếm sẽ trả về: "huy chương vàng", “huy chương”, “vàng”.

Toán tử lặp lại (quadrifiers)

Khi viết biểu thức chính quy, thường cần phân tích sự lặp lại của các số và ký hiệu. Đây không phải là vấn đề nếu không có nhiều lần lặp lại. Nhưng phải làm gì khi chúng ta không biết con số chính xác của họ? Trong trường hợp này, bạn phải sử dụng các siêu ký tự đặc biệt.

Để mô tả sự lặp lại, tứ giác được sử dụng - siêu ký hiệu để chỉ định số lượng. Quadrifier có hai loại:

  • chung, đặt trong ngoặc đơn;
  • viết tắt.

Bộ định lượng chung bị ảnh hưởng bởi mức tối thiểu và số tiền tối đa cho phép lặp lại phần tử dưới dạng hai số trong dấu ngoặc nhọn, ví dụ: x(2,5). Nếu không xác định được số lần lặp lại tối đa thì đối số thứ hai sẽ bị bỏ qua: x(2,).

Bộ định lượng tốc ký biểu thị các ký hiệu cho những lần lặp lại phổ biến nhất để tránh sự lộn xộn cú pháp không cần thiết. Ba chữ viết tắt thường được sử dụng:

1. * - không hoặc nhiều lần lặp lại, tương đương với (0,).

2. + - một hoặc nhiều lần lặp lại, tức là ,).

3. ? - không hoặc chỉ một lần lặp lại - (0,1).

Ví dụ về biểu thức chính quy

Đối với những người học biểu thức chính quy, các ví dụ là hướng dẫn tốt nhất. Chúng tôi sẽ liệt kê một số cho thấy chúng. nhiều cơ hội với nỗ lực tối thiểu. Tất cả mã chương trình hoàn toàn tương thích với Phiên bản PHP 4.x trở lên. Vì sự hiểu biết đầy đủ cú pháp và cách sử dụng tất cả các tính năng ngôn ngữ, chúng tôi giới thiệu cuốn sách “Biểu thức chính quy” của J. Friedl, trong đó thảo luận đầy đủ về cú pháp và chứa các ví dụ về các biểu thức chính quy không chỉ trong PHP mà còn cho Ngôn ngữ Python, Perl, MySQL, Java, Ruby và C#.

Kiểm tra tính chính xác của địa chỉ E-mail

Nhiệm vụ. Có một trang Internet mà khách truy cập được hỏi địa chỉ email. Biểu thức chính quy phải kiểm tra xem địa chỉ nhận được có chính xác hay không trước khi gửi tin nhắn. Việc xác minh không đảm bảo rằng thông tin được chỉ định Hộp thư thực sự tồn tại và chấp nhận các chữ cái. Nhưng nó có thể loại bỏ những địa chỉ không chính xác.

Giải pháp. Như trong bất kỳ ngôn ngữ lập trình nào, các biểu thức chính quy để xác minh địa chỉ email có thể được triển khai trong PHP những cách khác, và các ví dụ trong bài viết này không phải là lựa chọn cuối cùng và duy nhất. Do đó, trong mỗi trường hợp, chúng tôi sẽ cung cấp danh sách các yêu cầu cần tính đến khi lập trình và việc triển khai cụ thể hoàn toàn phụ thuộc vào nhà phát triển.

Vì vậy, một biểu thức kiểm tra xem email có hợp lệ hay không phải kiểm tra các điều kiện sau:

  1. Sự hiện diện của ký hiệu @ trong chuỗi nguồn và không có dấu cách.
  2. Phần tên miền của địa chỉ, theo sau là ký hiệu @, chỉ chứa các ký tự hợp lệ cho tên miền. Điều tương tự cũng áp dụng cho tên người dùng.
  3. Khi kiểm tra tên người dùng, bạn cần xác định xem ký tự đặc biệt, chẳng hạn như dấu nháy đơn hoặc Những ký tự này có khả năng nguy hiểm và có thể được sử dụng trong các cuộc tấn công như SQL SQL. Tránh những địa chỉ như vậy.
  4. Tên người dùng chỉ cho phép một dấu chấm, không thể là ký tự đầu tiên hoặc cuối cùng trên dòng.
  5. Tên miền phải chứa ít nhất hai và không quá sáu ký tự.

Một ví dụ có tính đến mọi thứ điều kiện quy định, có thể được nhìn thấy thêm trong hình.

Kiểm tra tính hợp lệ của URL

Nhiệm vụ. Kiểm tra xem đã cho chuỗi văn bản hợp lệ Một lần nữa, hãy lưu ý rằng các biểu thức chính quy xác thực URL có thể được triển khai theo nhiều cách khác nhau.

Giải pháp. Phiên bản cuối cùng của chúng tôi trông như thế này:

/^(https?:\/\/)?([\da-z\.-]+)\.((2,6))([\/\w \.-]*)*\/?$ /

Bây giờ chúng ta hãy xem xét các thành phần của nó chi tiết hơn bằng cách sử dụng hình.

Kiểm tra số thẻ tín dụng

Nhiệm vụ. Cần kiểm tra tính chính xác của số đã nhập thẻ nhựa hệ thống thanh toán phổ biến nhất. Tùy chọn chỉ được xem xét cho thẻ

Giải pháp. Khi tạo một biểu thức, bạn cần xem xét có thể có sẵn trong số khoảng trống đã nhập. Các con số trên thẻ được chia thành các nhóm để đọc và ghi chính tả dễ dàng hơn. Do đó, điều khá tự nhiên là một người có thể cố gắng nhập số theo cách này (tức là sử dụng dấu cách).

Viết một biểu thức phổ quát có tính đến các dấu cách và dấu gạch nối có thể khó hơn việc loại bỏ tất cả các ký tự ngoại trừ số. Do đó, bạn nên sử dụng siêu ký tự /D trong biểu thức để loại bỏ tất cả các ký tự ngoại trừ số.

Bây giờ bạn có thể tiến hành trực tiếp để kiểm tra số. Tất cả các công ty sản xuất thẻ tín dụng, sử dụng định dạng số duy nhất. Ví dụ sử dụng điều này và khách hàng không cần nhập tên công ty - nó được xác định bằng số. Thẻ Visa luôn bắt đầu bằng 4 và có độ dài số là 13 hoặc 16 chữ số. MasterCard bắt đầu trong phạm vi 51-55 với độ dài số là 16. Kết quả là chúng ta nhận được biểu thức sau:

Trước khi xử lý đơn hàng, bạn có thể kiểm tra bổ sung chữ số cuối cùng của số, được tính bằng thuật toán Luhn.

Kiểm tra số điện thoại

Nhiệm vụ. Kiểm tra tính chính xác của số điện thoại đã nhập.

Giải pháp. Số chữ số trong điện thoại cố định và di động số điện thoại khác nhau đáng kể giữa các quốc gia, do đó không thể kiểm tra tổng quát xem số điện thoại có chính xác hay không bằng cách sử dụng biểu thức thông thường. Nhưng số quốc tế có định dạng nghiêm ngặt và rất phù hợp để kiểm tra theo mẫu. Hơn nữa, ngày càng có nhiều quốc gia nhà điều hành điện thoạiđang cố gắng đáp ứng cùng một tiêu chuẩn. Cấu trúc của số như sau:

+CCC.NNNNNNNNNNxEEEE,Ở đâu:

C là mã quốc gia, gồm 1-3 chữ số.

N - số dài tới 14 chữ số.

E - phần mở rộng tùy chọn.

Cộng là yếu tố bắt buộc và dấu x chỉ xuất hiện khi cần mở rộng.

Kết quả là chúng ta có biểu thức sau:

^\+(1,3)\.(4,14)(?:x.+)?$

Các số trong phạm vi

Nhiệm vụ. Bạn phải khớp một số nguyên trong một phạm vi cụ thể. Ngoài ra, điều cần thiết là các biểu thức chính quy chỉ khớp với các số trong một phạm vi giá trị.

Giải pháp. Dưới đây là một số biểu thức cho một số trường hợp phổ biến nhất:

Tìm địa chỉ IP

Nhiệm vụ. Cần phải xác định liệu chuỗi đã chođịa chỉ IP hợp lệ ở định dạng IPv4 trong phạm vi từ 000.000.000.000-255.255.255.255.

Giải pháp. Như với bất kỳ tác vụ nào trong PHP, biểu thức chính quy có nhiều biến thể. Ví dụ: điều này:

Kiểm tra biểu thức trực tuyến

Việc kiểm tra tính chính xác của biểu thức chính quy có thể khó khăn đối với các lập trình viên mới do sự phức tạp của cú pháp, khác với các ngôn ngữ lập trình “thông thường”. Để giải quyết vấn đề này, có rất nhiều công cụ kiểm tra biểu thức trực tuyến giúp bạn dễ dàng kiểm tra tính chính xác của mẫu đã tạo trên văn bản thực. Lập trình viên nhập biểu thức và dữ liệu cần kiểm tra và thấy ngay kết quả xử lý. Thông thường cũng có một phần tham khảo mô tả chi tiết các biểu thức chính quy, ví dụ và sự khác biệt trong cách triển khai cho các ngôn ngữ lập trình phổ biến nhất.

Nhưng hoàn toàn tin tưởng vào kết quả của các dịch vụ trực tuyến không được khuyến khích đối với tất cả các nhà phát triển sử dụng PHP. Một biểu thức chính quy, được viết và kiểm tra cá nhân, sẽ cải thiện kỹ năng của bạn và đảm bảo không có lỗi.

Việc sử dụng phổ biến nhất các biểu thức chính quy trong Perl là trong các toán tử tìm kiếm và thay thế như S//, m/, toán tử kết nối =~ hoặc != vân vân. Theo quy định, tất cả các toán tử này đều có các tùy chọn tương tự như:

Thông thường tất cả các tùy chọn này được ký hiệu là "/x". Chúng thậm chí có thể được sử dụng bên trong các mẫu bằng cách sử dụng thiết kế mới (?...)

Các biểu thức hoặc mẫu thông thường giống như các thủ tục regrec trong Unix. Các biểu thức và cú pháp được mượn từ các thủ tục V8 được phân phối tự do bởi Henry Spencer, nơi chúng được mô tả chi tiết.

Các mẫu sử dụng các siêu ký tự sau (các ký tự biểu thị các nhóm ký tự khác) thường được gọi là tiêu chuẩn egrep:

Siêu ký tự có từ bổ nghĩa (được viết sau siêu ký tự):

Trong tất cả các trường hợp khác, dấu ngoặc nhọn được coi là ký tự thông thường (thông thường). Như vậy “*” tương đương với (0,) , “+” là (1,) và “?” - (0,1). n và m không thể lớn hơn 65536.

Theo mặc định, siêu ký tự là tham lam. Trận đấu được truyền bá nhiều lần nhất có thể mà không tính đến ảnh hưởng của các siêu ký tự tiếp theo. Nếu bạn muốn "giảm sự thèm ăn của họ", hãy sử dụng biểu tượng "?". Điều này không làm thay đổi ý nghĩa của siêu ký tự mà chỉ làm giảm mức độ lan truyền. Như vậy:

Mẫu hoạt động tương tự như dấu ngoặc kép, vì vậy bạn có thể sử dụng `\` - ký hiệu (ký hiệu dấu gạch chéo ngược) trong đó:

\t - ký tự tab
\N - dòng mới
\r - một chuyến xe trở về
\MỘT - dịch định dạng
\v - lập bảng theo chiều dọc
\Một - gọi
\e - bỏ trốn
\033 - ký hiệu ký hiệu bát phân
\x1A - thập lục phân
\c[ - biểu tượng điều khiển
\l - ký tự tiếp theo viết thường
\u - chữ hoa -//-
\L - tất cả các ký tự trong chữ thường tới \E
\U - ở phía trên -//-
\E - đăng ký giới hạn thay đổi
\Q - hủy hành động dưới dạng siêu ký tự

Ngoài ra, các siêu ký tự sau đã được thêm vào Perl:

Lưu ý rằng đây là tất cả ký tự "một". Sử dụng từ bổ nghĩa để chỉ trình tự. Vì thế:

Ngoài ra còn có các siêu ký tự tưởng tượng. Biểu thị các ký hiệu không tồn tại tại nơi giá trị thay đổi. Chẳng hạn như:

Ranh giới từ (\b) là một điểm tưởng tượng giữa các ký tự \w và \W. Trong một lớp ký tự, "\b" đại diện cho ký tự xóa lùi. Siêu ký tự \MỘT\Z- tương tự như "^" và "$", nhưng nếu phần đầu của dòng "^" và phần cuối của dòng "$" tác động lên mỗi dòng trong một chuỗi nhiều dòng thì \MỘT\Z cho biết điểm bắt đầu và kết thúc của toàn bộ chuỗi nhiều dòng.

Nếu việc nhóm được sử dụng trong một mẫu ( dấu ngoặc tròn), thì số chuỗi con của nhóm được chỉ định là "\digit". Lưu ý rằng theo một mẫu trong một biểu thức hoặc khối, các nhóm này được biểu thị là "$digit". Ngoài ra còn có các biến bổ sung:

Ví dụ:

$s = "Một 1 hai 2 và ba 3"; if ($s =~ /(\d+)\D+(\d+)/) ( print "$1\n"; # Kết quả "1" print "$2\n"; # "2" print "$+\n" ; # "2" print "$&\n"; # "1 hai 2" print "$`\n"; # "Một " print "$"\n"; # " và ba 3" )

Phiên bản Perl 5 chứa các cấu trúc mẫu bổ sung:

Ví dụ:

$s = "1+2-3*4"; if ($s =~ /(\d)(?=-)/) # Tìm số theo sau bởi "-" ( print "$1\n"; # Kết quả "2" ) else ( print "search error\n" ; )

(?! mẫu) - “nhìn” về phía trước bằng phủ định:

Ví dụ:

$s = "1+2-3*4"; if ($s =~ /(\d)(?!\+)/) # Tìm một chữ số không có dấu "+" theo sau ( print "$1\n"; # Kết quả "2" ) else ( print "search lỗi\n"; )

(?ismx) - công cụ sửa đổi “nội bộ”. Thật thuận tiện khi sử dụng trong các mẫu, chẳng hạn như trong đó bạn cần chỉ định một công cụ sửa đổi bên trong mẫu.

Quy tắc biểu thức chính quy. (regex)

  1. Bất kỳ ký tự nào cũng đại diện cho chính nó trừ khi nó là siêu ký tự. Nếu bạn cần hủy tác dụng của siêu ký tự, hãy đặt "\" trước siêu ký tự đó.
  2. Chuỗi ký tự biểu thị một chuỗi các ký tự này.
  3. Tập hợp các ký hiệu có thể có (lớp) là dấu ngoặc vuông"", điều này có nghĩa là trong chỗ này có thể là một trong các ký tự được chỉ định trong ngoặc. Nếu ký tự đầu tiên trong ngoặc là “^”, thì không có ký tự nào trong số các ký tự được chỉ định có thể xuất hiện tại điểm này trong biểu thức. Trong một lớp, bạn có thể sử dụng ký hiệu "-" để biểu thị một phạm vi ký tự. Ví dụ: a-z là một trong những chữ cái nhỏ của bảng chữ cái Latinh, 0-9 là một số, v.v.
  4. Diễn đàn cổng thông tin PHP. S.U.

Một trong những người rất mạnh mẽ và các tính năng hữu ích Ngôn ngữ PHP- hỗ trợ cho các biểu thức thông thường. Nhiều lập trình viên, cả những người mới bắt đầu và những người khá có kinh nghiệm, đều cảm thấy lo lắng trước sự phức tạp và rắc rối rõ ràng của ngôn ngữ biểu thức chính quy. Nhưng tôi có thể đảm bảo với bạn - nó đáng giá. Việc sử dụng các biểu thức chính quy giúp đơn giản hóa đáng kể công việc xử lý văn bản và dữ liệu có cấu trúc yếu.


Biểu thức chính quy là biểu thức được viết bằng một ngôn ngữ đặc biệt.Đừng lo lắng, ngôn ngữ này khá dễ hiểu; tất cả những gì bạn cần là kinh nghiệm và thực hành.


Tôi nghĩ bạn đã nhiều lần gặp phải tình huống có văn bản (ví dụ: trong Phần mềm soạn thảo văn bản) và bạn cần tìm thứ gì đó quan trọng trong đó. Nếu bạn biết chính xác những gì bạn đang tìm kiếm, mọi thứ đều đơn giản: mở hộp thoại tìm kiếm, nhập từ tìm kiếm, nhấn nút và thì đấy - văn bản sẽ được tìm thấy.


Nhưng bạn sẽ làm gì nếu chỉ biết trước loại thông tin mình đang tìm kiếm? Ví dụ: bạn phải đối mặt với nhiệm vụ tìm tất cả các địa chỉ E-mail trong một tài liệu vài trăm tờ. Một số sẽ xem tài liệu theo cách thủ công, một số sẽ nhập con chó (@) vào tìm kiếm và tìm kiếm nó. Đồng ý - cả hai lựa chọn đều là công việc khó khăn, vô ơn.

Đây là lúc các biểu thức chính quy có thể giải cứu. Theo một số phép tính gần đúng, biểu thức chính quy có thể được so sánh với mặt nạ hoặc mẫu được xếp chồng lên văn bản: nếu văn bản khớp với mặt nạ thì đây là đoạn mong muốn. Nhưng trước khi xem xét việc sử dụng biểu thức chính quy, chúng ta sẽ làm quen với cú pháp của chúng.

Biểu thức chính quy là một chuỗi văn bản được soạn theo các luật và quy tắc nhất định. Một chuỗi bao gồm các ký tự và nhóm ký tự, siêu ký tự, bộ định lượng và bộ sửa đổi.

Dưới các ký hiệu ở trong trường hợp này bất kỳ ký hiệu của bất kỳ bảng chữ cái đều được hiểu. Và không chỉ những cái có thể đọc được. Bạn có thể dễ dàng chèn một ký tự không thể đọc được vào một biểu thức; để thực hiện việc này, bạn chỉ cần biết mã của nó ở dạng thập lục phân. Ví dụ:

// ký tự có thể đọc được a E // ký tự và mã không thể đọc được \x41 - giống như chữ "A" \x09 - ký tự tab

Một nhóm ký tự là một số ký tự được viết tuần tự:

ACZ trung bình

Tôi muốn thu hút sự chú ý của bạn ngay lập tức - “khoảng trắng” trong biểu thức chính quy cũng được coi là một ký tự quan trọng, vì vậy hãy cẩn thận khi viết biểu thức. Ví dụ: các nhóm ký tự này là các biểu thức KHÁC NHAU:

ABC ở đâu ABC ở đâu

Thành phần tiếp theo của ngôn ngữ là siêu ký tự. Tiền tố "meta" có nghĩa là những ký hiệu này mô tả một số ký hiệu khác hoặc nhóm của chúng. Bảng mô tả các siêu ký tự chính của ngôn ngữ biểu thức chính quy:

Siêu ký tự để chỉ định các ký tự đặc biệt
() Chân đế. Xác định các biểu thức lồng nhau.
| Siêu ký tự lựa chọn
^ Siêu ký tự bắt đầu dòng
$ Siêu ký tự cuối dòng
\N Ký tự nguồn cấp dòng ( mã thập lục phân 0x0A)
\r Ký tự trả về vận chuyển (mã hex 0x0D)
\t Ký tự tab (mã hex 0x09)
\xhh Chèn một ký tự có mã thập lục phân 0xhh, ví dụ \x42 sẽ chèn chữ cái Latinh"B"
Siêu ký tự để chỉ định nhóm ký tự
. Chấm. Bất kỳ nhân vật nào.
\d Chữ số (0-9)
\D Không phải số (bất kỳ ký tự nào ngoại trừ ký tự 0-9)
\S Ký tự trống (thường là dấu cách và tab)
\S Ký tự không trống (tất cả ngoại trừ các ký tự được xác định bởi siêu ký tự \s)
\w Ký tự "từ điển" (ký tự được sử dụng trong từ. Thường là tất cả các chữ cái, tất cả các số và dấu gạch dưới ("_"))
\W Tất cả ngoại trừ các ký tự được xác định bởi siêu ký tự \w

Các siêu ký tự ở nửa sau của bảng rất dễ nhớ. "d" - chữ số (chữ số), "s" - ký hiệu (ký hiệu), "w" - word (chữ). Nếu chữ cái lớn thì bạn cần thêm “NOT” vào mô tả nhóm.

Ví dụ: hãy lấy văn bản “Áo đỏ có số 1812 và áo xanh có số 2009”. Hãy xem ví dụ về các biểu thức chính quy đơn giản nhất:

\d\d\d\d - sẽ tìm thấy 1812 và 2009 \D - sẽ tìm thấy tất cả các chữ cái, dấu cách và dấu chấm câu \s - sẽ tìm thấy tất cả khoảng trắng trong văn bản.

Nhưng năm trong ví dụ của chúng ta có thể được viết không phải bằng bốn mà bằng hai chữ số, các từ có thể có cách biến cách khác, v.v. Tập hợp con các ký tự được chỉ định bằng dấu ngoặc vuông có thể trợ giúp ở đây:

Có nghĩa là bất kỳ chữ số nào (giống như \d) - có nghĩa là chữ số chẵn - có nghĩa là bất kỳ ký hiệu nào của bảng chữ cái Latinh (trong mọi trường hợp) hoặc chữ số.

Ví dụ: biểu thức \d\d\d trong chuỗi kiểm tra sẽ chỉ tìm thấy 1812 chứ không tìm thấy 2009. Biểu thức này phải được đọc là "tìm tất cả các chuỗi bốn chữ số trong đó chữ số cuối bằng 0,2,4,6 hoặc 8".

Tất cả những gì chúng ta còn phải đề cập đến là các định lượng và bổ nghĩa.

định lượng là một cấu trúc đặc biệt xác định số lần một ký tự hoặc nhóm ký tự phải xuất hiện. Bộ định lượng được viết trong dấu ngoặc nhọn "()". Có thể có hai định dạng ghi: chính xác và phạm vi. Chính xácđịnh dạng được viết như thế này:

Ở đây X là số lần ký hiệu hoặc nhóm trước đó phải được lặp lại. Ví dụ như biểu thức

Hình thức ghi âm thứ hai là phạm vi. Được ghi lại dưới dạng

(X, Y) // hoặc (,Y) // hoặc (X,)

trong đó X là số lần tối thiểu và Y là số lần lặp lại tối đa. Ví dụ:

đọc là "hai đến bốn chữ số được viết theo trình tự." Nếu một trong các ranh giới không được chỉ định thì không có giới hạn nào được giả định. Ví dụ:

\w(3,) - ba chữ cái trở lên. \d(,5) - không có số nào cả, hoặc có, nhưng không quá năm.

Bộ định lượng có thể được áp dụng cho một ký tự hoặc một nhóm:

[A-Yaa-ya](1,3)

Cấu trúc này sẽ chọn từ văn bản tất cả các từ tiếng Nga từ một, hai hoặc ba bức thư(ví dụ: “hoặc”, “không”, “tôi”, “tôi đi”, v.v.)

Ngoại trừ dấu ngoặc nhọn Có thêm ba siêu ký tự định lượng: “*” (dấu hoa thị), “+” (dấu cộng) và “?” (câu hỏi). Chúng được sử dụng trong trường hợp không xác định trước được số lần lặp lại yêu cầu tối thiểu và tối đa. Ví dụ: khi tìm kiếm địa chỉ email, bạn không thể biết trước có bao nhiêu ký tự trong tên người dùng (trước "dog") và bao nhiêu ký tự trong tên miền (sau "dog").

Siêu ký tự "*" được đọc là "bất kỳ số tiền nào từ 0 trở lên", tức là. thiết kế

xác định bất kỳ số lượng chữ cái liên tiếp nào, bao gồm cả sự vắng mặt hoàn toàn của chúng.

Ký hiệu "+" chỉ khác với dấu hoa thị ở chỗ nó yêu cầu ít nhất một ký tự. Những thứ kia. thiết kế

khớp với bất kỳ chuỗi kỹ thuật số nào có một hoặc nhiều chữ số.

Biểu tượng "?" khớp với sự vắng mặt hoặc hiện diện của một ký tự. Những thứ kia. thiết kế

khớp với bất kỳ chuỗi kỹ thuật số nào có một hoặc hai chữ số.

Ở đây điều đáng nói là đặc điểm của các chất phản kháng “*” và “+” như tham lam. Vấn đề là theo mặc định, các ký tự này tương ứng với chuỗi ký tự dài nhất có thể. Ví dụ: đối với dòng “mẹ giặt khung” biểu thức:

sẽ chọn “mama xà phòng ra”, điều này hơi bất ngờ vì chúng tôi đã mong đợi nhận được “ma”. Để thay đổi hành vi này, hãy sử dụng siêu ký tự "?" (dấu chấm hỏi) viết ngay sau từ định lượng. Nó hạn chế sự “thèm ăn” của những người định lượng bằng cách buộc họ phải trả lại trận đấu đầu tiên thay vì trận đấu dài nhất. Bây giờ hãy thay đổi ví dụ trước:

và nhận được kết quả khớp yêu cầu "ma".

Thành phần cuối cùng của ngôn ngữ là từ bổ nghĩa. Công cụ sửa đổi là một ký tự đặc biệt xác định các tham số “hệ thống” để phân tích các biểu thức chính quy. Chỉ có bốn biểu tượng như vậy, chúng có thể được sử dụng riêng lẻ hoặc đồng thời:

Tôi Bật chế độ không phân biệt chữ hoa chữ thường, tức là chữ in hoa và chữ nhỏ trong biểu thức không khác nhau.
tôi Cho biết văn bản đang được tìm kiếm phải được coi là bao gồm nhiều dòng. Theo mặc định, công cụ biểu thức chính quy xử lý văn bản dưới dạng một chuỗi, bất kể nó thực sự là gì. Theo đó, các siêu ký tự "^" và "$" biểu thị phần đầu và phần cuối của toàn bộ văn bản. Nếu công cụ sửa đổi này được chỉ định, thì chúng sẽ lần lượt chỉ ra phần đầu và phần cuối của mỗi dòng văn bản.
S Siêu ký tự mặc định là "." không bao gồm ký tự dòng mới trong định nghĩa của nó. Những thứ kia. đối với văn bản nhiều dòng, biểu thức /.+/ sẽ chỉ trả về dòng đầu tiên chứ không phải toàn bộ văn bản như mong đợi. Việc chỉ định công cụ sửa đổi này sẽ loại bỏ giới hạn này.
bạn Làm cho tất cả các siêu ký tự định lượng "không tham lam" theo mặc định. Trong một số sửa đổi ngôn ngữ (đặc biệt là trong PHP), thay vì “U”, ký tự “g” được sử dụng, phù hợp hơn với ý nghĩa (“g” là viết tắt của tiếng Anh “tham lam”, “tham lam” ).

Bảng hiển thị phổ biến nhất và ví dụ cần thiết biểu thức chính quy. Một số trong số chúng có thể có vẻ phức tạp và rườm rà đối với bạn, nhưng nếu nghiên cứu chi tiết, chắc chắn bạn sẽ hiểu được.

Biểu thức chính quy trong PHP.

Được thiết kế để làm việc với các biểu thức chính quy trong PHP Chức năng đặc biệt, một danh sách trong đó và Mô tả ngắnđược cho trong bảng:

int preg_match (mẫu chuỗi, chủ đề chuỗi [, kết quả mảng])

Hàm kiểm tra xem nội dung của chủ đề có khớp với mẫu mẫu hay không. Trả về 1 nếu tìm thấy kết quả khớp, nếu không thì trả về 0. Nếu bạn chỉ định tham số mảng khớp tùy chọn, thì khi hàm được thực thi, một phần tử duy nhất sẽ được nhập vào đó - kết quả khớp đầu tiên được tìm thấy.

"; print_r($found); ?>

int preg_match_all (mẫu chuỗi, chủ đề chuỗi, mảng khớp [, thứ tự int])
Hàm này giống hệt với hàm trước, với điểm khác biệt duy nhất - nó tìm kiếm toàn bộ văn bản và trả về TẤT CẢ kết quả khớp được tìm thấy trong mảng khớp.
preg_replace hỗn hợp (mẫu hỗn hợp, thay thế hỗn hợp, chủ đề hỗn hợp [, giới hạn int])
Giống như cả hai hàm tiền thân của nó, preg_replace tìm kiếm một đoạn văn bản khớp với mẫu. Hàm thay thế tất cả các đoạn được tìm thấy bằng văn bản được chỉ định trong tham số.Trước khi làm sạch:\n$text\n\n"; $text = preg_replace("/(\n \s(2,))/"," ",$text); echo " Sau khi dọn dẹp:\n$text"; // sẽ hiển thị văn bản đã xóa các ký tự đặc biệt // và khoảng trắng thừa?>
hỗn hợp preg_replace_callback (mẫu hỗn hợp, gọi lại hỗn hợp, chủ đề hỗn hợp [, giới hạn int])
Chức năng này là phiên bản mở rộng của chức năng trước đó. Sự khác biệt chính là hàm này được truyền vào tham số tên của hàm sẽ phân tích văn bản và tạo văn bản thay thế.
mảng preg_split (mẫu chuỗi, chủ đề chuỗi [, giới hạn int [, cờ int]])
Hàm này tương tự như hàm phát nổ() và hàm chia(). Điểm đặc biệt của nó là dải phân cách không chuỗi cố định, nhưng là một biểu thức chính quy. Hàm chia dữ liệu nguồn thành các phần tử và đặt chúng vào mảng đầu ra.
mảng preg_grep (mẫu chuỗi, đầu vào mảng)
Chức năng này dành cho tìm kiếm thường xuyên trong mảng. Đối với tìm kiếm, một mẫu và một mảng dữ liệu đầu vào được chỉ định và một mảng được trả về chỉ bao gồm các phần tử khớp với mẫu.

Danh sách các hàm được xem xét vẫn chưa đầy đủ nhưng nó khá đủ để bắt đầu làm việc thành công với các biểu thức chính quy. Nếu bạn quan tâm đến chủ đề này, hãy nhớ đọc đọc thêm(ví dụ: cuốn sách "Biểu thức chính quy" của Friedl). Ngoài ra, vì mục đích đào tạo, tôi khuyên bạn nên cài đặt một trong chương trình đặc biệtđể kiểm tra các biểu thức chính quy (ví dụ: "PCRE" hoặc "RegEx Builder").

) Tôi đã chỉ cho bạn một ví dụ về cách sử dụng biểu thức chính quy để tìm các phần cụ thể mã nguồn trang. Bây giờ chúng ta sẽ học cách tự viết chúng. Kỹ năng này sẽ giúp bạn viết, xóa văn bản khỏi những đoạn không cần thiết, tìm kiếm những phần cần thiết trong khối lượng lớn văn bản và như vậy.

Chủ đề này khá phức tạp nhưng tôi sẽ cố gắng trình bày ngắn gọn nhất điểm quan trọng. Tôi không biết mình sẽ thành công đến mức nào nhưng tôi hy vọng bài học sẽ hữu ích.
Vì vậy, hãy bắt đầu với thực tế là có một số hàm để làm việc với các biểu thức chính quy trong PHP, nhưng có ba hàm thường được sử dụng nhất:

  • preg_replace - tìm kiếm và thay thế một cái phù hợp biểu hiện thông thường chữ;
  • preg_match - chỉ là tìm kiếm thông thường;
  • preg_split - tìm kiếm và phân tách văn bản.

Qua ít nhất, trong các bài học trước chúng ta đã sử dụng chính xác chúng. Chính xác hơn, thay vì preg_match có preg_match_all, nhưng về cơ bản thì điều này giống nhau, chỉ có điều cái sau không làm gián đoạn việc tìm kiếm sau lần tìm kiếm đầu tiên. Nghĩa là, nếu chúng ta sử dụng preg_match, chúng ta sẽ không tìm thấy tất cả các lần xuất hiện mà chỉ tìm thấy lần đầu tiên.

Việc chọn chức năng nào để sử dụng trong tình huống nào là khá đơn giản. Chúng ta cần thay thế - chúng ta sử dụng thay thế, như trong trường hợp chúng ta cần loại bỏ những phần không cần thiết của mã trang, nhớ không?

$page = preg_replace("/ ^]/i", "", $page); $page = preg_replace("/ ^]/i", "", $page); $page = str_replace("", "", $trang);

Tham số đầu tiên của hàm là một ký tự thông thường xác định những gì chúng ta đang tìm kiếm. Thứ hai là những gì chúng tôi thay thế nó bằng. Thứ ba - Chúng ta đang tìm kiếm ở đâu? Do đó, ở đây chúng tôi lấy biến $page và gán cho nó kết quả của hàm preg_replace trong đó chúng tôi tìm kiếm tất cả các loại đầu vào=hộp kiểm, cũng như các nhãn mở và đóng. Họ đã thay thế chúng bằng ", tức là họ chỉ xóa chúng. Tôi hy vọng mọi thứ đều rõ ràng ở đây. Chúng ta sẽ chuyển sang phân tích chính biểu thức (tham số đầu tiên của hàm) sau đó một chút.
Ngoài ra còn có một ví dụ về cách sử dụng preg_match_all, rất hữu ích cho việc tìm kiếm tất cả các liên kết trong văn bản còn lại. Khi đó chúng tôi cần các liên kết vì chúng chứa từ khóa, mà chúng tôi đã phân tích cú pháp. Đây là những gì đã xảy ra:

Preg_match_all("/ ]+?>(.*?)<\/a>/uis",$page,$ok); cho ($j=0; $j ".$ok[$j].""; }

Tham số đầu tiên lại là một biểu thức chính quy để tìm tất cả các liên kết được đặt tự nhiên trong thẻ “a” (nếu bạn không quen với đánh dấu html thì hãy đọc). Thứ hai là biến chứa văn bản sẽ được tìm kiếm. Tham số thứ ba là biến mà kết quả được đặt vào - $ok. Sau đó, tất cả những gì còn lại là xem qua tất cả các yếu tố cần thiết của $ok để có được những thông tin chính mà chúng ta cần. Riêng biệt, cần phải nói rằng ở đầu ra, chúng ta nhận được một mảng đa chiều. Đó là lý do tại sao chúng tôi hiển thị nó theo cách phức tạp như vậy: $ok[$j]. Để xem cấu trúc của mảng, hãy sử dụng hàm bên dưới và bạn sẽ hiểu mọi thứ.

Print_r($ được);

Có vẻ như chúng tôi đã sắp xếp lại các chức năng mà chúng tôi sử dụng cho công việc của mình. Bây giờ tất cả những gì còn lại là học cách viết các biểu thức chính quy tương tự, đây là tham số đầu tiên của mỗi phương thức này. Hãy chuyển sang điều quan trọng nhất.

Cách viết câu thông thường

Đầu tiên, chúng ta hãy nhìn vào các cấu trúc cơ bản. Biểu thức có các tùy chọn. Chúng được chỉ định bằng một chữ cái và được viết ở cuối, trước dấu gạch chéo.

Ngoài ra, các siêu ký tự sau được hỗ trợ:

Ngược lại, siêu ký tự có thể có các từ bổ nghĩa:

Bây giờ chúng ta có thể chuyển sang phân tích các mô hình thông thường của bài học trước. Dựa vào những dấu hiệu trên, chúng ta hãy cố gắng hiểu những gì chúng ta có. Đây là biểu thức:

/^]/tôi

Dấu gạch chéo đầu tiên và cuối cùng “/” biểu thị rằng có một biểu thức chính quy bên trong chúng. Đồng thời, sau cái cuối cùng, chúng ta đặt “i”, đây là một tùy chọn, như trong bảng đầu tiên - không tính đến trường hợp nào. Bên trong dấu gạch chéo là chính chuỗi thông thường. Nó bắt đầu bằng dấu nhỏ hơn và thẻ đầu vào, cùng mọi thứ tiếp theo sau đó cho đến khi dấu chấm chỉ là văn bản thuần túy để tìm kiếm. Nhưng bản thân dấu chấm và các ký hiệu sau nó lại thú vị hơn. Trong trường hợp này, cấu trúc “.*?” có nghĩa là bất kỳ chuỗi ký tự nào. Nghĩa là, nếu chúng ta chỉ kết hợp văn bản và cấu trúc này, thì chúng ta sẽ chọn tất cả văn bản sau lần xuất hiện đầu tiên cho đến hết. Để dừng, bạn cần gặp thẻ HTML “nhiều hơn” đóng hoặc một ký tự dòng mới. Thiết kế này mang đến cho chúng ta một cơ hội như vậy:

Các ký tự trong ngoặc vuông được kết nối bằng OR logic. Phần cuối của dòng là dấu lớn hơn HOẶC phần đầu của dòng.
Đó là tất cả biểu thức, trong đó chúng ta đặt điều kiện bắt đầu, điều kiện giữa và điều kiện kết thúc. Không khó phải không? Đây là một minh họa cho rõ ràng:

Hãy xem xét một điều nữa để củng cố mọi thứ. Chúng tôi đã tìm kiếm liên kết với họ:

/]+?>(.*?)<\/a>/uis

Chúng tôi đọc biểu thức. Một lần nữa, chúng tôi loại bỏ dấu gạch chéo và tùy chọn trước tiên. Cờ "uis" có thể tự giải thích được, ngoại trừ "u" mà tôi không mô tả - nó cho thấy rằng chúng tôi đang sử dụng bảng mã Unicode. Không còn nhiều nữa. Bắt đầu là thẻ "a", mở ra, sau đó đến lớp

có nghĩa là KHÔNG lớn hơn hoặc nhỏ hơn (mở và đóng thẻ HTML), tức là bất kỳ ký tự nào trong trường hợp này. “+?” được thêm vào lớp, nghĩa là lớp này sẽ xuất hiện 1 lần trở lên (nhưng chắc chắn ít nhất 1 lần). Và sau đó là thẻ html đóng cho thẻ “a”. Có văn bản bên trong liên kết được nhóm chỉ định

Rốt cuộc, chúng tôi không biết loại văn bản nào sẽ ở đó, vì vậy chúng tôi xác định một nhóm như vậy. Và cuối cùng có thẻ đóng “a”:

Xin lưu ý rằng chúng ta thoát dấu gạch chéo bằng dấu gạch chéo ngược để nó được coi là văn bản đơn giản.

Phù. Chủ đề này thực sự khá phức tạp, nó đòi hỏi phải thực hành. Có lẽ tôi đang làm điều gì đó không hoàn toàn tối ưu và có thể tạo ra các biểu thức chính quy khác, chính xác hơn, nhưng tôi cũng là người tự học như bạn, vì vậy đừng phán xét khắt khe mà hãy chia sẻ các lựa chọn của bạn trong phần nhận xét. Ngoài ra, nếu có điều gì chưa rõ ràng, trang bình luận và liên hệ luôn sẵn sàng phục vụ bạn.

Hãy bắt đầu với biểu thức chính quy là gì. Vì vậy, hãy trả lời tôi câu hỏi này: có chữ “e” trong từ “kiểm tra” không? "Ăn!" bạn nói. Sau đó tôi hỏi bạn câu hỏi thứ hai, làm thế nào bạn tìm thấy chữ "e" trong từ "test"? Câu trả lời rất rõ ràng, chúng ta lấy ký tự đầu tiên, tức là “t” và so sánh nó với ký tự mà chúng ta đang tìm kiếm, tức là với “e”. Nếu chúng không bằng nhau thì chúng ta lấy ký tự thứ hai, tức là “e”, và so sánh nó với ký tự mà chúng ta đang tìm kiếm, tức là “e”. Thì đấy! Một trận đấu đã được tìm thấy. Trả lời: Trong từ “test” có chứa chữ “e”.

Bây giờ hãy trả lời tôi một câu hỏi nữa, biểu thức chính quy trong ví dụ này ở đâu? Tôi hy vọng bạn đoán được rằng biểu thức chính quy ở đây chính là thứ chúng tôi đang tìm kiếm trong từ "kiểm tra". Tức là chữ "e" trong ví dụ này là một biểu thức chính quy.

Biểu thức chính quy được sử dụng trong PHP là gì? Trong thực tế của tôi, chẳng hạn, các biểu thức thông thường được sử dụng để xác định xem địa chỉ email có được soạn chính xác hay không. Những biểu thức như vậy cũng được sử dụng để xác định tính chính xác của tên người dùng và mật khẩu. Sử dụng biểu thức chính quy, bạn có thể tìm thấy địa chỉ trong một liên kết và lưu nó. Có rất nhiều điều bạn có thể làm. Bằng cách phân tích điều này, bạn có thể xác định chức năng chính của biểu thức chính quy và hai chức năng phụ. Chức năng chính, đây là tìm kiếm kết quả khớp trong một chuỗi. Các tác dụng phụ bao gồm lưu các kết quả phù hợp được tìm thấy và thay thế chúng.

Biểu thức chính quy đầu tiên

Về lý thuyết, chúng ta hiểu cách tìm ký tự “e” trong từ “test”, nhưng điều này được thực hiện trên thực tế như thế nào? Để sử dụng biểu thức chính quy trong php, các hàm sau thường được sử dụng:

preg_match("biểu thức chính quy (mẫu)", "biến trong đó tìm kiếm được thực hiện", "Biến trong đó kết quả tìm kiếm được lưu (tham số tùy chọn)"); - Chức năng khớp
preg_replace("biểu thức chính quy (mẫu)", "Thay thế kết quả tìm thấy bằng gì", "biến mà việc thay thế được thực hiện"); - Chức năng thay thế

Hãy bắt đầu sử dụng các hàm này. Sau đây là ví dụ về tìm kiếm ký tự "e" trong từ "test":

$a = "kiểm tra";
if(preg_match("/e/",$a)) echo "found!!";

Mã mô tả điều kiện: nếu tìm thấy thứ gì đó khớp với mẫu trong biến $a, thì hiển thị thông báo “tìm thấy!!” Như bạn có thể nhận thấy, mẫu của chúng tôi nằm giữa hai dấu "/". Trong trường hợp này, ký hiệu "/" tượng trưng cho sự bắt đầu và kết thúc của mô hình của chúng tôi. Tôi hy vọng nó sẽ rõ ràng.

Tất nhiên, tất cả điều này đều thú vị... nhưng mẫu của chúng tôi rất đơn giản, bạn có nghĩ vậy không? Suy cho cùng, chúng ta hiếm khi cần tìm ký hiệu nào đó trong một biến. Trong hầu hết các trường hợp, chúng ta cần tìm nhiều ký tự và cả những ký tự chưa biết. Làm sao để? Hãy đặt cho mình một vấn đề và cố gắng giải quyết nó. Giả sử chúng ta có một chuỗi gồm các số và một chữ cái tiếng Anh không xác định

Làm thế nào để tìm thấy lá thư này? Có thể có bất kỳ chữ cái nào trong bảng chữ cái tiếng Anh, vậy làm thế nào bạn có thể xác định được nó? Chính bạn đã trả lời câu hỏi của mình, có chữ cái nào, tức là nó nằm trong khoảng từ a đến z. Bạn có thể sử dụng phạm vi trong biểu thức thông thường. Nếu chúng ta không biết mình đang tìm kiếm ký tự nào nhưng biết chắc chắn rằng ký tự này là một chữ cái trong bảng chữ cái tiếng Anh thì mục nhập sẽ như sau:

$a = "123a321";
if(preg_match("//",$a)) echo "found!!";

Lưu ý rằng phạm vi được đặt trong dấu ngoặc "[" "]". Mọi thứ trong ngoặc như vậy được định nghĩa là một ký hiệu, trong trường hợp này ký hiệu nằm trong khoảng từ a đến z. Nếu chúng ta cần tìm không phải một chữ cái mà là một số, thì mục nhập sẽ như thế này:

$a = "abc1cba";
if(preg_match("//",$a)) echo "found!!";

Tôi cũng muốn lưu ý rằng biểu thức chính quy có phân biệt chữ hoa chữ thường nên ký tự “A” và “a” hoàn toàn khác nhau, để tìm kiếm cả hai ký tự, hãy viết như sau:

$a = "123a321";
if(preg_match("//",$a)) echo "found!!";

Ngoài ra còn có việc tìm kiếm các chữ cái tiếng Nga, được thực hiện tương tự như với các chữ cái tiếng Anh:

$a = "123×321";
if(preg_match("/[a-zA-Z]/",$a)) echo "found!!";

Siêu ký tự

Chúng ta đã học cách tìm kiếm một ký tự không xác định trong một chuỗi. Phải làm gì nếu chúng ta cần tìm một vài ký tự? Cái gọi là siêu ký hiệu ra tay giải cứu... Giả sử chúng ta có một chuỗi gồm các số và chữ cái, làm thế nào chúng ta có thể mô tả nó trong mẫu? Bạn có thể làm được việc này:

dòng - 123a321
vật mẫu -

Hmm... mẫu thực sự khớp với chuỗi của chúng tôi và khi được kiểm tra tính tuân thủ, nó sẽ cho kết quả đúng như đã mong đợi từ lâu! Nhưng đó là một bản ghi cồng kềnh, bạn có nghĩ vậy không?

Đây là cách để rút ngắn nó:

dòng - 123a321
vật mẫu - *

Đối với tôi, có vẻ như nó ngắn hơn. Ký hiệu “*” là gì? Đây là cùng một siêu ký hiệu, có nghĩa là ký hiệu mà chúng tôi đã mô tả (cụ thể là ký hiệu có thể chứa các số từ 0 đến 9 hoặc các chữ cái trong bảng chữ cái tiếng Anh, từ a đến z) có thể được lặp lại vô thời hạn hoặc nhiều lần. Vâng vâng! Siêu ký hiệu này sẽ tìm thấy kết quả khớp trong một biến trống, vì ngay cả khi không có ký hiệu mà chúng tôi mô tả cũng sẽ trả về giá trị đúng! Nhớ lấy điều này

Có những siêu ký tự nào khác?

Ví dụ: siêu ký tự "+" Nó gần giống với siêu ký tự "*" với một ngoại lệ nhỏ. "*" sẽ trả về true ngay cả khi không có ký tự nào và "+" sẽ kiểm tra sự hiện diện của ít nhất một ký tự. Nghĩa là, nếu một dòng yêu cầu sự hiện diện tối thiểu một ký tự sau đó sử dụng "+" thay vì "*"

Siêu ký tự "?" cũng thường được sử dụng. Điều đó có nghĩa là dòng không được chứa nhiều hơn một ký tự mong muốn. Hãy để tôi đưa ra một vài ví dụ về hai siêu ký tự cuối cùng mà tôi đã mô tả.

Giả sử chúng ta cần kiểm tra tính chính xác của mật khẩu người dùng. Hãy suy nghĩ xem mật khẩu người dùng nên chứa những gì? Đầu tiên, nó phải có ít nhất một ký tự. Thứ hai, nó chỉ được chứa số và chữ cái trong bảng chữ cái tiếng Anh, vì vậy biểu thức chính quy sẽ có dạng như sau:

$a = "qwerty12345";

Chúng tôi đã cho phép những nhân vật nào? Chữ cái tiếng Anh của bất kỳ trường hợp và số. Bây giờ hãy thử để lại một dòng trống thay vì mật khẩu.

$a = "";
if(preg_match("/+/",$a)) echo "Mật khẩu đúng";

Bạn sẽ không thấy thông báo “Mật khẩu đúng”. Tại sao? Bởi vì siêu ký tự "+" đã kiểm tra chuỗi để xem liệu nó có ít nhất một ký tự hay không.

Và bây giờ là một mẹo nhỏ, chúng ta hãy xem biểu hiện của chúng ta, chúng ta đã không cho phép, à, giả sử có một khoảng trống trong đó, phải không? đặt một khoảng trắng ở cuối mật khẩu và chạy

$a = "qwerty12345";
if(preg_match("/+/",$a)) echo "Mật khẩu đúng";

Và tại sao chúng ta lại thấy thông báo về mật khẩu chính xác? Nó khá đơn giản... Hàm preg_match(); ngừng kiểm tra ở trận đấu đầu tiên. Nghĩa là, ký hiệu “q” phù hợp với mẫu mà chúng tôi đã mô tả và mọi thứ khác không còn quan trọng đối với hàm này. Chúng ta nên làm gì? Đây là cách khắc phục nó:

$a = "qwerty12345";
if(preg_match("/^+$/",$a)) echo "Mật khẩu đúng";

Bằng cách thêm "^" vào đầu biểu thức và "$" ở cuối, chúng ta sẽ cho hàm biết mẫu nào sẽ khớp với tất cảđường kẻ. Nếu bạn chạy mã này, bạn sẽ không thấy thông báo vì có một ký tự không hợp lệ ở cuối mật khẩu - khoảng trắng

Bây giờ hãy thay đổi siêu ký tự "+" thành siêu ký tự "?". Bạn nghĩ điều gì sẽ xảy ra? Chính xác, sẽ không có thông báo nào về tính chính xác của mật khẩu vì mật khẩu chứa nhiều hơn một ký tự. Tôi hy vọng tôi đã giải thích chính xác công việc của ba siêu ký tự được sử dụng thường xuyên này

Đôi khi "không" lại tốt hơn

Ít nhất chúng tôi đã học được cách kiểm tra xem mật khẩu có chính xác không, và điều đó thật tốt! Để tôi kể cho bạn nghe về một cách khác để tìm kiếm thứ gì đó trong một chuỗi. Giả sử chúng ta cần kiểm tra sự vắng mặt của số trong một chuỗi. Làm thế nào để làm nó? Đây là dòng:

(Tôi đã đặc biệt giới thiệu những biểu tượng “-_+()” này vào đó để cuộc sống không giống như mật ong…) Ta có thể xây dựng biểu thức sau:

Nhưng bạn phải thừa nhận, không phải lúc nào chúng ta cũng biết những ký tự nào được sử dụng trong một dòng, nhưng chúng ta biết chắc chắn rằng không nên có số trong đó! Do đó, sẽ hợp lý hơn nếu chỉ viết một mẫu bỏ qua các dòng trong đó KHÔNG những con số chứ không phải những con số trong đó có "Trời ơi, có bao nhiêu ký hiệu khó hiểu!!!". Dưới đây là ví dụ về biểu thức được soạn thảo chính xác cho các vấn đề như vậy:

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) echo "Không có số!";

Chúng tôi đã đạt được điều này như thế nào? Chúng tôi đã nhập biểu tượng Nhưng! chữ hoa "^" ([^0-9]) được đặt ở đầu cho biết rằng sẽ có không nên Tôi hy vọng việc này đã được giải quyết

Chà, hãy tóm tắt nó từ từ... Tôi sẽ đưa ra hai ví dụ kèm theo lời giải thích, trong đó chúng ta sẽ học cách lưu kết quả tìm kiếm vào một biến và tìm hiểu cách kiểm tra tính chính xác của địa chỉ gửi thư

Tôi đã nhìn thấy nó và lưu nó!

Blog của tôi

$a = " Blog của tôi";
preg_match("/ /", $a);

Trong biểu thức chính quy của chúng tôi, chúng tôi đã mô tả tất cả các ký tự có thể có trong một liên kết. Tôi cũng muốn chú ý đến dấu ngoặc kép và ký tự “/” trong biểu thức của chúng ta. Chúng được đặt trước dấu gạch chéo ngược, nó dùng để làm gì? Thực tế là "/" và trích dẫn bản thân chúng là những ký tự đặc biệt. Và để mẫu có thể coi chúng là những biểu tượng thông thường, chúng ta cần sàng lọc chúng. Việc thoát được thực hiện bằng cách thêm dấu gạch chéo ngược trước các ký tự đặc biệt. Tôi hy vọng nó rõ ràng

$a = " Blog của tôi";
preg_match("/ /", $a, $b);

Vâng, theo đó, cần phải thêm một tham số bổ sung dưới dạng biến $b, trong đó liên kết tìm thấy sẽ được lưu trữ. Bạn cũng cần biết rằng kết quả tìm kiếm được đặt trong một mảng. Vì vậy, biến $b là một mảng. Thông tin chúng ta đang tìm kiếm nằm trong chỉ mục 1. Điều này có nghĩa là kết quả tìm kiếm nằm trong biến $b. Hãy hiển thị kết quả ra màn hình:

$a = " Blog của tôi";
preg_match("/ /", $a, $b);
tiếng vang $b;

Địa chỉ đúng là chìa khóa thành công!

Và cuối cùng, câu trả lời cho câu hỏi email có đúng không? Đầu tiên bạn cần tìm hiểu những ký tự nào được phép sử dụng trong địa chỉ? Theo tôi biết, các ký tự được phép bao gồm:

  • Các chữ cái, số tiếng Anh, “_”, “-” ummmm mọi thứ dường như là... Chúng ta sẽ tiếp tục từ việc này.
  • Tiếp theo chúng ta có "@"
  • Sau đó là chữ cái tiếng Anh
  • Giai đoạn tiếp theo
  • Và một lần nữa các chữ cái tiếng Anh...

Vì vậy, biểu thức chính quy sẽ như sau:

$a = " [email được bảo vệ]";
if(preg_match("/^+@+.+$/", $a)) echo "địa chỉ email là chính xác!";
else echo "địa chỉ email KHÔNG được viết chính xác!";

Chà... tôi hy vọng rằng những ghi chép như vậy bây giờ không làm bạn sợ hãi và bạn hoàn toàn có thể hiểu được chúng.

Cuối cùng tôi muốn nói một điều. Bài viết trở nên cồng kềnh, đồng thời chỉ đề cập đến một phần khả năng. Nếu bạn đang đọc câu này thì rất có thể bạn đã đọc đến cuối, cảm ơn bạn rất nhiều

Về loạt bài viết về phát triển blog cms, phần đầu của loạt bài Tôi tuyên bố nó đóng cửa! Trong thời gian sắp tới, chúng tôi sẽ bắt đầu triển khai bảng quản trị, vì vậy đừng “chuyển đổi” Nếu bạn có bất kỳ câu hỏi nào, tôi sẽ sẵn lòng trả lời. Chúc mọi điều tốt lành đến với bạn, đó là tất cả những gì tôi có!