Học biểu thức chính quy [đã đóng]

166
Teifion 2008-08-08 04:05.

Tôi không thực sự hiểu cụm từ thông dụng. Bạn có thể giải thích chúng cho tôi một cách dễ hiểu được không? Nếu có bất kỳ công cụ hoặc sách trực tuyến nào, bạn có thể liên kết với chúng không?

1 answers

802
Greg Bacon 2010-05-04 06:09.

Phần quan trọng nhất là các khái niệm. Một khi bạn hiểu cách các khối xây dựng hoạt động, sự khác biệt về cú pháp chỉ nhiều hơn một chút so với các phương ngữ thông thường. Một lớp phía trên cú pháp của công cụ biểu thức chính quy là cú pháp của ngôn ngữ lập trình bạn đang sử dụng. Các ngôn ngữ như Perl loại bỏ hầu hết sự phức tạp này, nhưng bạn sẽ phải ghi nhớ những cân nhắc khác nếu bạn đang sử dụng biểu thức chính quy trong chương trình C.

Nếu bạn coi biểu thức chính quy là các khối xây dựng mà bạn có thể trộn và kết hợp tùy ý, thì điều đó sẽ giúp bạn học cách viết và gỡ lỗi các mẫu của riêng mình cũng như cách hiểu các mẫu do người khác viết.

Bắt đầu đơn giản

Về mặt khái niệm, các biểu thức chính quy đơn giản nhất là các ký tự chữ. Mẫu Nkhớp với ký tự 'N'.

Các biểu thức chính quy bên cạnh các chuỗi khớp nhau. Ví dụ: mẫu Nickkhớp với chuỗi 'N' theo sau là 'i' theo sau là 'c' theo sau là 'k'.

Nếu bạn đã từng sử dụng grepUnix — ngay cả khi chỉ để tìm kiếm các chuỗi trông thông thường — thì bạn đã sử dụng biểu thức chính quy! (The retrong grepđề cập đến biểu thức thông thường.)

Đặt hàng từ menu

Chỉ cần thêm một chút phức tạp, bạn có thể kết hợp 'Nick' hoặc 'nick' với mẫu [Nn]ick. Phần trong dấu ngoặc vuông là một lớp ký tự , có nghĩa là nó khớp chính xác với một trong các ký tự kèm theo. Bạn cũng có thể sử dụng phạm vi trong các lớp ký tự, do đó, [a-c]khớp với 'a' hoặc 'b' hoặc 'c'.

Mẫu .này đặc biệt: thay vì chỉ khớp với một chấm chữ, nó khớp với bất kỳ ký tự nào . Về mặt khái niệm, nó giống với lớp nhân vật thực sự lớn [-.?+%$A-Za-z0-9...].

Hãy coi các lớp nhân vật như menu: chỉ chọn một.

Các phím tắt hữu ích

Việc sử dụng .có thể giúp bạn tiết kiệm rất nhiều lần nhập và có các phím tắt khác cho các mẫu phổ biến. Giả sử bạn muốn khớp một chữ số: có một cách để viết đó là [0-9]. Chữ số là mục tiêu đối sánh thường xuyên, vì vậy thay vào đó bạn có thể sử dụng phím tắt \d. Những cái khác là \s(khoảng trắng) và \w(ký tự từ: chữ và số hoặc gạch dưới).

Ví dụ: các biến thể viết hoa là phần bổ sung của chúng, vì vậy, \Sđối sánh với bất kỳ ký tự không có khoảng trắng nào.

Một lần là không đủ

Từ đó, bạn có thể lặp lại các phần của mẫu của mình bằng các bộ định lượng . Ví dụ: mẫu ab?ckhớp với 'abc' hoặc 'ac' vì bộ ?định lượng làm cho phân tử con mà nó sửa đổi là tùy chọn. Các định lượng khác là

  • * (không hoặc nhiều lần)
  • + (một hoặc nhiều lần)
  • {n}(chính xác n lần)
  • {n,}(ít nhất n lần)
  • {n,m}(ít nhất n lần nhưng không quá m lần)

Đặt một số khối này lại với nhau, mẫu [Nn]*ickphù hợp với tất cả

  • ick
  • Nick
  • nick
  • Nnick
  • nNick
  • nnick
  • (và như thế)

Trận đấu đầu tiên thể hiện một bài học quan trọng: *luôn thành công! Bất kỳ mẫu nào có thể khớp với 0 lần.

Một vài ví dụ hữu ích khác:

  • [0-9]+(và tương đương của nó \d+) khớp với bất kỳ số nguyên không âm nào
  • \d{4}-\d{2}-\d{2} các ngày đối sánh có định dạng như 2019-01-01

Phân nhóm

Bộ định lượng sửa đổi mẫu ở bên trái ngay lập tức của nó. Bạn có thể mong đợi 0abc+0khớp với '0abc0', '0abcabc0', v.v., nhưng mẫu ngay bên trái của bộ định lượng cộng là c. Điều này có nghĩa là 0abc+0phù hợp với '0abc0', '0abcc0', '0abccc0', v.v.

Để khớp một hoặc nhiều chuỗi ký tự 'abc' với các số không ở đầu, hãy sử dụng 0(abc)+0. Dấu ngoặc đơn biểu thị một chất con có thể được định lượng như một đơn vị. Các công cụ biểu thức chính quy cũng thường lưu hoặc "nắm bắt" phần văn bản đầu vào khớp với một nhóm có dấu ngoặc đơn. Việc trích xuất các bit theo cách này linh hoạt hơn và ít bị lỗi hơn nhiều so với việc đếm các chỉ số và substr.

Luân phiên

Trước đó, chúng ta đã thấy một cách để so khớp 'Nick' hoặc 'nick'. Khác là với luân phiên như trong Nick|nick. Hãy nhớ rằng sự luân phiên bao gồm mọi thứ ở bên trái và mọi thứ ở bên phải. Sử dụng dấu ngoặc đơn để nhóm các giới hạn phạm vi |, ví dụ như , (Nick|nick).

Đối với một ví dụ khác, bạn có thể viết tương tự [a-c]như vậy a|b|c, nhưng điều này có thể là không tối ưu vì nhiều cách triển khai giả định các lựa chọn thay thế sẽ có độ dài lớn hơn 1.

Bỏ trốn

Mặc dù một số ký tự khớp với chính họ, những ký tự khác có ý nghĩa đặc biệt. Mẫu \d+không khớp với dấu gạch chéo ngược theo sau là chữ thường D theo sau là dấu cộng: để có được điều đó, chúng tôi sẽ sử dụng \\d\+. Dấu gạch chéo ngược loại bỏ ý nghĩa đặc biệt của ký tự sau.

Lòng tham

Các định lượng biểu thức chính quy rất tham lam. Điều này có nghĩa là chúng khớp với nhiều văn bản nhất có thể trong khi vẫn cho phép toàn bộ mẫu khớp thành công.

Ví dụ: giả sử đầu vào là

"Xin chào," cô ấy nói, "Bạn có khỏe không?"

Bạn có thể mong đợi ".+"chỉ khớp từ 'Xin chào', và sau đó sẽ ngạc nhiên khi bạn thấy nó được khớp từ 'Xin chào' cho đến hết 'bạn?'.

Để chuyển từ tham lam sang những gì bạn có thể nghĩ là thận trọng, hãy thêm phần bổ sung ?vào bộ định lượng. Bây giờ bạn đã hiểu làm thế nào \((.+?)\), ví dụ từ câu hỏi của bạn hoạt động. Nó khớp với trình tự của một dấu ngoặc đơn bên trái theo nghĩa đen, theo sau là một hoặc nhiều ký tự và được kết thúc bằng một dấu ngoặc đơn bên phải.

Nếu đầu vào của bạn là '(123) (456)', thì lần chụp đầu tiên sẽ là '123'. Các bộ định lượng không tham lam muốn cho phép phần còn lại của mẫu bắt đầu khớp càng sớm càng tốt.

(Theo sự nhầm lẫn của bạn, tôi không biết bất kỳ phương ngữ biểu thức chính quy ((.+?))nào sẽ làm điều tương tự. Tôi nghi ngờ có điều gì đó đã bị thất lạc trong quá trình truyền tải ở đâu đó trên đường đi.)

Mỏ neo

Sử dụng mẫu đặc biệt ^để chỉ khớp ở đầu dữ liệu nhập của bạn và $chỉ khớp ở cuối. Tạo "mối liên kết" với các mẫu của bạn trong đó bạn nói, "Tôi biết điều gì ở phía trước và phía sau, nhưng hãy cho tôi mọi thứ ở giữa" là một kỹ thuật hữu ích.

Giả sử bạn muốn khớp với các nhận xét của biểu mẫu

-- This is a comment --

bạn sẽ viết ^--\s+(.+)\s+--$.

Xây dựng của riêng bạn

Biểu thức chính quy là đệ quy, vì vậy bây giờ bạn đã hiểu các quy tắc cơ bản này, bạn có thể kết hợp chúng theo cách bạn muốn.

Công cụ để viết và gỡ lỗi regexes:

  • RegExr (dành cho JavaScript)
  • Perl: YAPE: Regex Giải thích
  • Regex Coach (công cụ được hỗ trợ bởi CL-PPCRE )
  • RegexPal (dành cho JavaScript)
  • Trình kiểm tra trực tuyến biểu thức chính quy
  • Regex Buddy
  • Regex 101 (dành cho PCRE, JavaScript, Python, Golang)
  • Visual RegExp
  • Expresso (dành cho .NET)
  • Rubular (cho Ruby)
  • Thư viện biểu thức chính quy (Regex được xác định trước cho các trường hợp phổ biến)
  • Txt2RE
  • Regex Tester (dành cho JavaScript)
  • Regex Storm (dành cho .NET)
  • Debuggex (trình kiểm tra regex trực quan và trình trợ giúp)

Sách

  • Làm chủ Cụm từ Thông dụng , Phiên bản thứ 2 và Phiên bản thứ 3 .
  • Bảng gian lận biểu thức chính quy
  • Sách dạy nấu ăn Regex
  • Tự dạy các biểu thức thông thường

Tài nguyên miễn phí

  • RegexOne - Học với các bài tập tương tác, đơn giản.
  • Biểu thức chính quy - Mọi thứ bạn nên biết (Chuỗi PDF)
  • Tóm tắt cú pháp Regex
  • Cách hoạt động của Regexes

Chú thích

†: Câu lệnh trên .khớp với bất kỳ ký tự nào là sự đơn giản hóa cho mục đích sư phạm, không hoàn toàn đúng. Dấu chấm phù hợp với bất kỳ ký tự nào ngoại trừ dòng mới, "\n"nhưng trong thực tế, bạn hiếm khi mong đợi một mẫu hình như .+vượt qua ranh giới dòng mới. Perl regexes có một /scông tắc và Java Pattern.DOTALL, ví dụ, để .khớp bất kỳ ký tự nào. Đối với các ngôn ngữ không có tính năng như vậy, bạn có thể sử dụng một cái gì đó như [\s\S]để đối sánh "bất kỳ khoảng trắng hoặc bất kỳ không phải khoảng trắng nào", hay nói cách khác là bất kỳ thứ gì.

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Một thương hiệu kế thừa khác có được cuộc sống mới khi những người chủ mới của Black Opal có được Hội chợ thời trang

Một thương hiệu kế thừa khác có được cuộc sống mới khi những người chủ mới của Black Opal có được Hội chợ thời trang

Desiree Rogers, trái, và Cheryl Mayberry McKissack Chuyển sang, Fenty Beauty và Pat McGrath, có một đế chế làm đẹp mới do phụ nữ làm chủ đang trỗi dậy. Sau thương vụ mua lại mỹ phẩm Black Opal vào tháng 9, đội ngũ quyền lực của Giám đốc điều hành công ty Desiree Rogers và Chủ tịch Cheryl Mayberry McKissack đã thông báo mua lại thương hiệu làm đẹp tiên phong Fashion Fair từ người sáng lập Johnson Publishing Company (JPC).

Ngoài việc trở nên vô nghĩa, các bên bộc lộ giới tính giờ đây đã trở nên chết người

Ngoài việc trở nên vô nghĩa, các bên bộc lộ giới tính giờ đây đã trở nên chết người

Đối với những người có quá nhiều thời gian, tiệc tiết lộ giới tính là một cách thú vị để không cần áp đặt những định kiến ​​hạn chế lên thai nhi trước một đối tượng bạn bè giả vờ quan tâm một cách lịch sự. Tuy nhiên, việc chỉ dựa vào những chiếc bánh nướng có màu nhân tạo để biểu thị một tiếng hoo-ha hoặc một đứa trẻ đi tè đã trở nên xa xỉ trong các bậc cha mẹ trên Instagram.

Kirstjen Nielsen đang cố gắng đổi mới bản thân với tư cách là một người phụ nữ 'nói ra sự thật cho sức mạnh'

Kirstjen Nielsen đang cố gắng đổi mới bản thân với tư cách là một người phụ nữ 'nói ra sự thật cho sức mạnh'

Hôm thứ Tư, cựu Bộ trưởng An ninh Nội địa Kirstjen Nielsen vì một lý do nào đó đã được đưa ra một diễn đàn để phát biểu tại Hội nghị thượng đỉnh Những người phụ nữ quyền lực nhất của Fortune. Và có thể đoán trước được, người phụ nữ giám sát các nỗ lực (đang diễn ra) của chính quyền Trump nhằm chia cắt các gia đình ở biên giới đã sử dụng thời gian của mình như một cơ hội để tự bảo vệ mình và tự nhận mình là người — và hãy hít thở sâu ở đây — “đã nói sự thật với quyền lực.

Toyota Racing Development sẽ cho ra mắt Supra 3000GT Concept, Massive Wing vào tháng tới

Toyota Racing Development sẽ cho ra mắt Supra 3000GT Concept, Massive Wing vào tháng tới

Vì thế hệ mới nhất của chiếc xe điều chỉnh được yêu thích trên thế giới hiện đã có mặt tại đây, nên chỉ có điều kiện là Toyota Racing Development sẽ đưa phiên bản Supra thế hệ thứ năm sửa đổi của riêng mình đến SEMA vào tháng tới. Toyota đã cho chúng tôi một gợi ý về những gì sẽ xảy ra trong tuần này: một chiếc Concept GR Supra 3000GT hiện đại.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language