Hướng dẫn về Regex - Một bản tóm tắt nhanh bằng các ví dụ
Chủ đề cơ bản
Neo - ^ và $
^ Các kết quả phù hợp với bất kỳ chuỗi nào bắt đầu bằng The -> Hãy thử nó!
end $ khớp với chuỗi kết thúc bằng kết thúc
^ Kết thúc chuỗi kết hợp chính xác $ (bắt đầu và kết thúc bằng Kết thúc )
roar khớp với bất kỳ chuỗi nào có tiếng gầm trong đó
Định lượng - * +? và {}
abc * khớp với một chuỗi có ab theo sau là 0 hoặc nhiều hơn c -> Hãy thử nó!
abc + khớp với chuỗi có ab theo sau bởi một hoặc nhiều c
abc ? khớp với một chuỗi có ab theo sau là 0 hoặc 1 c
abc {2} khớp với chuỗi có ab theo sau là 2 c
abc {2,} khớp với một chuỗi có ab theo sau bởi 2 hoặc nhiều hơn c
abc {2,5} khớp với chuỗi có ab theo sau là 2 đến 5 c
a (bc) * khớp với chuỗi có tiếp theo là 0 hoặc nhiều bản sao của chuỗi bc
a (bc) {2,5} khớp với chuỗi có tiếp theo là 2 đến 5 bản của chuỗi bc
Toán tử OR - | hoặc là []
a (b | c) khớp với một chuỗi có dấu sau là b hoặc c -> Thử nó!
một [bc] giống như trước
Các lớp ký tự - \ d \ w \ s và.
\ d phù hợp với một ký tự đơn là một chữ số -> Hãy thử nó!
\ w khớp với một ký tự từ (ký tự chữ và số cộng với gạch dưới) -> Dùng thử!
\ s khớp với ký tự khoảng trắng (bao gồm các tab và ngắt dòng)
. phù hợp với bất kỳ nhân vật -> Hãy thử nó!
.
toán tử cẩn thận vì lớp thường hoặc lớp nhân vật phủ định (chúng tôi sẽ đề cập đến tiếp theo) nhanh hơn và chính xác hơn.\d
, \w
Và \s
cũng trình bày phủ nhận của họ với \D
, \W
và \S
tương ứng.\D
sẽ thực hiện kết quả nghịch đảo đối với kết quả thu được \d
.\ D khớp với một ký tự không phải là chữ số -> Hãy thử!
^.[$()|*+?{\
bằng dấu gạch chéo ngược \
vì chúng có ý nghĩa đặc biệt.\ $ \ d phù hợp với chuỗi có $ trước một chữ số -> Dùng thử!
\t
, dòng mới \n
, trả về vận chuyển \r
.
Cờ
/abc/
/
^
và $
sẽ khớp với phần bắt đầu và kết thúc của một dòng, thay vì toàn bộ chuỗi/aBc/i
sẽ khớp AbC
)
Chủ đề trung gian
Nhóm và chụp - ()
a ( bc ) dấu ngoặc đơn tạo một nhóm chụp với giá trị bc -> Hãy thử nó!
một (: bc ) * sử dụng : chúng tôi vô hiệu hóa các nhóm chụp -> Hãy thử nó!
a (? <foo> bc ) bằng cách sử dụng ? <foo> chúng tôi đặt tên cho nhóm -> Dùng thử!
(?<foo>...)
Biểu thức khung - []
[abc] phù hợp với một chuỗi mà có hoặc là một hoặc ab hoặc ac -> là giống như a | b | c -> Hãy thử nó!
[ac] giống như trước
[a-fA-F0-9] một chuỗi đại diện cho một chữ số thập lục phân đơn lẻ, không phân biệt chữ hoa chữ thường -> Hãy dùng thử!
[0-9]% một chuỗi có ký tự từ 0 đến 9 trước dấu%
[^ a-zA-Z] một chuỗi không có chữ cái từ a đến z hoặc từ A đến Z. Trong trường hợp này dấu ^ được sử dụng làm từ chối biểu thức -> Hãy thử nó!
\
) mất quyền hạn đặc biệt của chúng: vì vậy chúng tôi sẽ không áp dụng "quy tắc thoát".
Tham lam và lười biếng
* + {}
) là toán tử tham lam, do đó chúng mở rộng kết quả phù hợp với chúng thông qua văn bản được cung cấp.<.+>
đối sánh <div>simple div</div>
trong . Để chỉ bắt được thẻ, chúng tôi có thể sử dụng thẻ để làm cho nó lười biếng:This is a <div> simple div</div> test
div
?
<. +?> khớp với bất kỳ ký tự nào một hoặc nhiều lần được bao gồm bên trong < và > , mở rộng khi cần -> Hãy thử!
.
lợi cho một regex nghiêm ngặt hơn:<[^ <>] +> khớp với bất kỳ ký tự nào ngoại trừ <hoặc> một hoặc nhiều lần được bao gồm bên trong < và > -> Hãy dùng thử!
Chủ đê nâng cao
Ranh giới - \ b và \ B
\ b abc \ b thực hiện tìm kiếm "chỉ toàn bộ từ" -> Dùng thử!
\b
đại diện cho một neo giống như dấu mũ (tương tự $
và ^
) khớp với một bên là một ký tự từ (như \w
) và mặt kia không phải là ký tự từ (ví dụ nó có thể là đầu chuỗi hoặc ký tự khoảng trắng).\B
. Điều này khớp với tất cả các vị trí \b
không khớp và có thể là nếu chúng ta muốn tìm mẫu tìm kiếm được bao quanh hoàn toàn bởi các ký tự từ.\ B abc \ B chỉ phù hợp nếu mẫu được bao quanh hoàn toàn bởi các ký tự từ -> Hãy thử!
Tham chiếu ngược - \ 1
( [abc] ) \ 1 bằng cách sử dụng \ 1 nó khớp với cùng một văn bản được so khớp bởi nhóm chụp đầu tiên -> Hãy thử nó!
([abc]) ( [de] ) \ 2 \ 1 chúng ta có thể sử dụng \ 2 (\ 3, \ 4, v.v.) để xác định cùng một văn bản được so khớp bởi nhóm chụp thứ hai (thứ ba, thứ tư, v.v.) -> Thử đi!
(? <foo> [abc] ) \ k <foo> chúng tôi đặt tên t foo o nhóm và chúng tôi tham khảo nó sau này ( \ k <foo> ). Kết quả là giống nhau của regex đầu tiên -> Hãy thử nó!
Nhìn về phía trước và nhìn phía sau - (? =) Và (? <=)
d (? = r ) phù hợp với chỉ khi d được theo sau bởi r , nhưng r sẽ không là một phần của kết hợp regex tổng thể -> Hãy thử nó!
(? <= r ) d phù hợp với chỉ một d nếu được bắt đầu bởi một r , nhưng r sẽ không là một phần của kết hợp regex tổng thể -> Hãy thử nó!
d (?! r ) chỉ khớp với d nếu không được theo sau bởi r , nhưng r sẽ không là một phần của kết hợp regex tổng thể -> Hãy thử nó!
(? <! r ) d chỉ phù hợp với một d nếu không được bắt đầu bằng r , nhưng r sẽ không là một phần của trận đấu regex tổng thể -> Hãy thử nó!
Cụm từ thông dụng (regex hoặc regexp) cực kỳ hữu ích trong việc trích xuất thông tin từ bất kỳ văn bản nào bằng cách tìm kiếm một hoặc nhiều kết quả phù hợp của mẫu tìm kiếm cụ thể (ví dụ: chuỗi ký tự ASCII hoặc unicode cụ thể).
Các trường của phạm vi ứng dụng từ xác nhận hợp lệ đến phân tích cú pháp / thay thế chuỗi, đi qua việc dịch dữ liệu sang các định dạng khác và trích xuất web.
Một trong những tính năng thú vị nhất là khi bạn đã học cú pháp, bạn có thể sử dụng công cụ này trong hầu hết các ngôn ngữ lập trình (JavaScript, Java, VB, C #, C / C ++, Python, Perl, Ruby , Delphi, R, Tcl, và nhiều người khác) với sự phân biệt nhỏ nhất về sự hỗ trợ của các tính năng nâng cao và các phiên bản cú pháp được hỗ trợ bởi các công cụ).
Hãy bắt đầu bằng cách xem xét một số ví dụ và giải thích.
Sử dụng
Ví dụ,
Để được thực hiện theo nghĩa đen, bạn phải thoát khỏi các ký tự
Lưu ý rằng bạn có thể khớp với các ký tự không in được như tab
Chúng tôi đang học cách xây dựng một regex nhưng quên một khái niệm cơ bản: cờ .
Một regex thường đi kèm với dạng này , trong đó mẫu tìm kiếm được phân cách bởi hai ký tự gạch chéo . Cuối cùng, chúng ta có thể chỉ định một cờ với các giá trị này (chúng ta cũng có thể kết hợp chúng với nhau):