Biểu thức chính quy \ p {L} và \ p {N}


106

Tôi chưa quen với biểu thức chính quy và đã được cung cấp biểu thức chính quy sau:

(\p{L}|\p{N}|_|-|\.)*

Tôi biết * nghĩa là gì và | nghĩa là "hoặc" và điều đó \ thoát ra.

Nhưng những gì tôi không biết là gì \p{L}\p{N}có nghĩa là gì. Tôi đã tìm kiếm nó trên Google mà không có kết quả ...

Ai đó có thể giúp tôi?


Tôi cũng đã tìm kiếm trên Google, nhưng tôi nhận được kết quả này .
MC Emperor

Câu trả lời:


160

\p{L}khớp với một điểm mã duy nhất trong danh mục "chữ cái".
\p{N}khớp với bất kỳ loại ký tự số nào trong bất kỳ tập lệnh nào.

Nguồn: thường- expressions.info

Nếu bạn định làm việc với các cụm từ thông dụng nhiều, tôi khuyên bạn nên đánh dấu trang web đó, nó rất hữu ích.


thx cho câu trả lời nhanh :). Nhưng không phải regex sau đó khớp với 10? Tôi đã thử một trình đối sánh regex trực tuyến: regexpal.com
Diemauerdk

@ user1093774: Tôi không nghĩ rằng regexpal hỗ trợ \p{}, nhưng có, nó phải phù hợp.
Cerbrus

1
Cú pháp này dành riêng cho việc triển khai Unicode regex hiện đại, mà không phải trình thông dịch nào cũng nhận ra. Bạn có thể thay thế an toàn \ p {L} bằng {a-zA-Z} (ký hiệu ascii) hoặc {\ w} (ký hiệu perl / vim); và \ p {N} theo {0-9} (ascii) hoặc {\ d} (perl / vim). Nếu bạn muốn kết hợp tất cả trong số họ, chỉ cần làm: {a-zA-Z0-9} + hoặc {\ w \ d} +
Rafael Beckel

16
Rafael, tôi không' đồng ý rằng bạn có thể yên tâm thay thế \p{L}bởi {a-zA-Z}. {a-zA-Z}chẳng hạn, sẽ không khớp với bất kỳ ký tự có dấu nào, chẳng hạn như ký tự éđược sử dụng toàn bộ trong tiếng Pháp. Vì vậy, chúng chỉ có thể thay thế một cách an toàn nếu bạn chắc chắn rằng bạn sẽ chỉ xử lý tiếng Anh và không có gì khác.
Rolf

Nó có khớp với điểm mã hoặc đơn vị mã không? stackoverflow.com/a/27331885/4928642
Qwertiy

30

Đây là các phím tắt thuộc tính Unicode ( \p{L}cho các chữ cái Unicode, \p{N}cho các chữ số Unicode). Chúng được hỗ trợ bởi .NET, Perl, Java, PCRE, XML, XPath, JGSoft, Ruby (1.9 trở lên) và PHP ( kể từ 5.1.0 )

Ở mức độ nào đó, đó là một regex rất kỳ lạ. Bạn không nên sử dụng thay thế khi một lớp ký tự đủ:

[\p{L}\p{N}_.-]*

regex trong xml - tôi đã không constrcuted regex bản thân mình :)
Diemauerdk

Ngoài thực tế là việc bắt dấu ngoặc đơn đã được sử dụng, các RE thực sự sẽ biên dịch theo cùng một thứ (tốt, trong bất kỳ công cụ RE tối ưu hóa nào hỗ trợ \p{…}kiểu trình tự thoát ngay từ đầu).
Donal Fellows

trông giống như plugin unicode XRegExp. mà nếu như vậy, sẽ là bất kỳ alpha-số trong bất kỳ ngôn ngữ
Tim

Cảm ơn, liệt kê các ngôn ngữ hỗ trợ rất hữu ích, không biết rằng có những hạn chế ở đó (hầu hết những thứ của regex'y là "phổ quát").
HoldOffHunger

@HoldOffHunger: Thật không may. Đó là lý do tại sao có một thị trường cho các công cụ như RegexBuddy. Hãy nhìn vào regular-expressions.info/refbasic.html , bạn sẽ ngạc nhiên trước sự khác biệt tinh tế và không quá tinh tế giữa hương vị regex ...
Tim Pietzcker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.