繁体   English   中英

正则表达式以匹配除5以外的所有数字字符

[英]Regular expression to match all numeric characters except 5

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

[^\D|5]

要么

[^\D5]

或[0-46-9]或[012346789]

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

[^\d]

要么

[\D]

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

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

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

[123467890]

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

实际上,添加交替| 而零长度的断言^只会降低您的性能。

较短的版本是:

[0-46-9]

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

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


编辑:

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

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

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

在以下条件下将匹配:

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

\\d只是[0-9] 请参阅Java regex参考以进行确认。

只需使用[0-46-9] 您可以在regex小提琴中尝试一下。

更新:

基于利用De Morgan定律并根据OP的评论使用逻辑补码的要求,这是我对[^\\D5]的逻辑补码的解释。

[^\\D5]本质上表示“ NOT (非数字字符 5)”。 将其与参考的Wikipedia中有关De Morgan定律的NOT (A OR B)”进行比较。

我们需要的又是什么“( 不是非数字字符) 5)”。 将其与引用的Wikipedia文章中的“( NOT A) ANDNOT B)”进行比较。

这就是我对逻辑ANDing使用一系列先行表达式进行逻辑互补[^\\D5]解释:

(?!\D)(?!5).

不,它不使用^^双重否定; 如您所见,这不起作用; 但上述逻辑补本质上意味着什么,我们想要在regexese - “( 不是非数字字符) 5)” -应用到单个字符(即. )。

您可以在后续的正则表达式小提琴中看到,上述逻辑补码产生的结果与[^\\D5]相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM