当我要匹配除5以外的所有数字字符时,我使用:

[^\D|5]


要么

[^\D5]


要么
        [0-46-9]
要么
        [012346789]

当我不想匹配任何数字字符时,可以使用:

[^\d]


要么

[\D]


他们都工作良好。但是,当我使用[^^\d5][^^\d|5]匹配除5以外的所有数字字符时,它将不起作用。

我想在很多情况下使用它。例如,我要匹配所有\p{P},但不匹配。有什么方法可以使用\:匹配除5以外的所有数字字符?

最佳答案

您可以使用以下方式匹配除5以外的所有数字:

[123467890]


没有理由使用所有内容的简写形式。
它对正则表达式引擎没有影响。

实际上,添加alternation |和零长度断言^只会降低性能。

较短的版本是:

[0-46-9]


字符类[]中的连字符/破折号行为

连字符将在字符类中指定一个范围。您可以查找ASCII表以查看正在执行的范围,例如:[ -Z]实际上匹配ASCII 33至127。



编辑:

好的,现在我对您的要求有了更好的了解。
您需要具体说明需要预先匹配的内容。

您可以使用负/正前瞻来做到这一点:

(?!.*?5.*?)(?!.*?\p{Alpha}.*?)(\p{P}*?$|\p{L}*?$)


在以下条件下将匹配:


没有数字5
POSIX类中没有字符:Alpha
具有Unicode属性“字母”或“标点”的任何字符

09-10 10:25
查看更多