[英]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以外的所有数字字符?
[123467890]
没有理由使用所有内容的简写形式。 它对正则表达式引擎没有影响。
实际上,添加交替|
而零长度的断言^
只会降低您的性能。
[0-46-9]
[]
连字符将在字符类中指定一个范围。 您可以查找ASCII表以查看正在执行的范围,例如: [ -Z]
实际上匹配ASCII 33至127。
好的,现在我对您的要求有了更好的了解。
您需要具体说明需要预先匹配的内容。
您可以使用负/正前瞻来做到这一点:
(?!.*?5.*?)(?!.*?\p{Alpha}.*?)(\p{P}*?$|\p{L}*?$)
在以下条件下将匹配:
\\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) AND ( NOT B)”进行比较。
这就是我对逻辑ANDing使用一系列先行表达式进行逻辑互补[^\\D5]
解释:
(?!\D)(?!5).
不,它不使用^^
双重否定; 如您所见,这不起作用; 但上述逻辑补本质上意味着什么,我们想要在regexese - “( 不是非数字字符) 和 ( 非 5)” -应用到单个字符(即.
)。
您可以在后续的正则表达式小提琴中看到,上述逻辑补码产生的结果与[^\\D5]
相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.