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

时间:2011-12-14 11:44:44

标签: regex perl unicode

Perl正则表达式中提供了许多现成的字符类,例如\d\S,或者新的Unicode字符串,例如\p{P}, which matches punctuation characters

现在让我们说我想匹配所有标点符号\p{P}(相当多的标点符号,而不是你想要手工输入的东西) - 除了一个之外的所有符号,除了好的旧komma(或逗号,,)。

有没有办法指定这个要求,只需扩展方便的角色类并手工拿走komma?

2 个答案:

答案 0 :(得分:9)

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

双重否定:

/[^\P{P},]/

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

“和”通过前瞻/后视:

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

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

unichars

答案 1 :(得分:7)

试试这个

[^\P{P},]

这是一个否定的字符类,它匹配除列出的字符之外的所有字符。

\P{P}否定\p{P}