使用现成的字符类并进一步限制

7
许多现成的字符类在Perl正则表达式中可用,例如\d\S,或者新颖的Unicode grokkers,例如\p{P},它匹配标点符号字符。 现在假设我想匹配所有标点符号\p{P}(其中有很多,并且不是您想手动键入的内容)-除了一个,即老式的逗号(,)以外的所有标点符号。
除了手动扩展方便的字符类并手动删除逗号之外,还有其他方法可以指定此要求吗?

发现一个非常相似的问题,实际上是同一个问题:如何在Perl中匹配除特定字符外的任何非空格字符? - Lumi
2个回答

9
$ unichars -au '\p{P}' | wc -l
598

双重否定:

/[^\P{P},]/

$ unichars -au '[^\P{P},]' | wc -l
597

使用前后顾及断言实现“and”:

/\p{P}(?<!,)/

$ unichars -au '\p{P}(?<!,)' | wc -l
597

unichars


太好了,谢谢!你提供的unichars脚本链接也非常有用。 - Lumi

7

试试这个

[^\P{P},]

这是一个排除字符类,匹配除了列出的字符以外的所有字符。

\P{P} 排除 \p{P}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接