正则表达式\ p {L}和\ p {N}


106

我是正则表达式的新手,并已获得以下正则表达式:

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

我知道*是什么意思| 表示“或”,并且\转义。

但我不知道该怎么\p{L}\p{N}手段。我已经在Google上搜索了,但没有结果...

有人能帮我吗?


我也用Google搜索,但是得到了这个结果
MC Emperor

Answers:


160

\p{L}匹配类别“字母”中的单个代码点。
\p{N}与任何脚本中的任何数字字符匹配。

资料来源:regular-expressions.info

如果您打算大量使用正则表达式,建议您为该站点添加书签,这非常有用。


thx的快速答案:)。但是正则表达式不应该匹配10吗?我已经尝试过在线正则表达式匹配器:regexpal.com
Diemauerdk

@ user1093774:我不认为正则表达式支持\p{},但是可以,它应该匹配。
Cerbrus

1
此语法专用于现代Unicode正则表达式实现,并非所有解释器都可以识别。您可以用{a-zA-Z}(ASCII表示法)或{\ w}(perl / vim表示法)安全地替换\ p {L};和\ p {N},分别为{0-9}(ascii)或{\ d}(perl / vim)。如果您想匹配所有这些对象,只需执行:{a-zA-Z0-9} +或{\ w \ d} +
拉斐尔·贝克尔

16
拉斐尔,我不同意您可以放心替换\p{L}{a-zA-Z}{a-zA-Z},例如,将不匹配任何带有重音符号的字符,例如é,在法语中都使用。因此,只有在确定只处理英语而没有其他处理的情况下,才可以安全地替换这些语言。
罗尔夫(Rolf)

它与代码点或代码单位匹配吗?stackoverflow.com/a/27331885/4928642
Qwertiy,

30

这些是Unicode属性快捷方式(\p{L}用于Unicode字母,\p{N}用于Unicode数字)。.NET,Perl,Java,PCRE,XML,XPath,JGSoft,Ruby(1.9和更高版本)和PHP(从5.1.0开始)都支持它们。

无论如何,这是一个非常奇怪的正则表达式。当字符类满足时,您不应该使用替代:

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

它的xml中的正则表达式-我自己还没有
构造

除了使用捕获括号的事实之外,RE实际上将编译为同一事物(好吧,在任何\p{…}首先支持转义序列样式的优化RE引擎中)。
多纳研究员

看起来像XRegExp unicode插件。如果是这样,则它将是任何语言中的任何字母数字
蒂姆(Tim)

谢谢,列出支持语言很有用,没有意识到那里有限制(大多数正则表达式都是“通用的”)。
HoldOffHunger

@HoldOffHunger:不幸的是,它远非如此。这就是为什么有诸如RegexBuddy之类的工具市场的原因。看看regular-expressions.info/refbasic.html,你会在正则表达式口味之间的微妙和不那么微妙的差异感到惊讶...
蒂姆Pietzcker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.