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?
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.
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 N
khớ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 Nick
khớ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 grep
Unix — 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 re
trong grep
đề cập đến biểu thức thông thường.)
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.
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.
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?c
khớ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]*ick
phù hợp với tất cả
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-01Bộ đị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+0
khớ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+0
phù 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
.
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.
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.
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.)
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+--$
.
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â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 /s
cô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ì.
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.
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ì?
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.
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.
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!
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.
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?
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.
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).
Đố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.
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.
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 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. 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ì!
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
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 +"
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.
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.
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.
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.