是否 \p{L} 等效于 [^\d\s]

  • 本文关键字:是否 regex pcre
  • 更新时间 :
  • 英文 :


要匹配字母,这两个正则表达式是等价的吗?通常更可取吗?还是这是"视情况而定"的情况?

1.统一码字母短码:

p{L}

2.否定数字和空格的PCRE短代码:

[^ds]

它们不等效。

假设您使用u选项,p{L}表示"字母(类别 L("。[^sd]的意思是"不是空格(Z类(,也不是数字(Nd类("。如果每个角色确实都属于三个类别之一,那么你是对的,因为集合论,但有些字符不属于这三个类别中的任何一个。

例如,逗号,是一个标点符号(类别 P(,将匹配[^sd],但不是p{L}

事实上,Unicode 中有超过3 个类别。

所以要实际使用否定来表示p{L},你必须说:

[^p{C}p{M}p{N}p{P}p{S}p{Z}]

基本上列出了所有其他类别。但是一旦Unicode决定添加一个新类别并且PCRE决定支持它,它就会中断。不用说,请不要在生产:)中使用它

两个正则表达式之间的对比是鲜明的:

正则表达式p{L}匹配任何字母(因此L(,不仅像w那样匹配罗马和希腊字母,而且还匹配任何其他字母。

否定字符类[^ds]匹配不是数字0-9而不是制表符、换行符、垂直制表符、表单换行符、回车符、空格和可能的其他与区域设置相关的字符的任何内容。

因此,[^ds]比仅匹配一种字符类型的p{L}更强大,匹配的字符类型范围要大得多。

相关内容

  • 没有找到相关文章

最新更新