正则表达式匹配除 5 之外的所有数字字符
Posted
技术标签:
【中文标题】正则表达式匹配除 5 之外的所有数字字符【英文标题】:Regular expression to match all numeric characters except 5 【发布时间】:2014-03-22 09:07:26 【问题描述】:当我想匹配除 5 之外的所有数字字符时:
[^\D|5]
或
[^\D5]
或 [0-46-9] 要么 [012346789]
当我不想匹配可以使用的数字字符时:
[^\d]
或
[\D]
它们都运行良好。但是当我使用[^^\d5]
或[^^\d|5]
来匹配除5之外的所有数字字符时,它就不起作用了。
我想在很多情况下使用它。例如,我想匹配所有\pP
,但不匹配\:
。有什么方法可以使用^\d
匹配除5以外的所有数字字符?
【问题讨论】:
怎么样:([0-4]|[6-9])
?
您实际上可以使用单个字符类:[0-46-9]
。
@VasiliSyrakis,酷!我不知道!每天学习新事物! :)
没问题。我在下面的答案中添加了有关字符类中连字符的更多信息。
【参考方案1】:
你可以使用这个匹配除 5 之外的所有数字:
[123467890]
没有理由使用所有内容的速记版本。 这对正则表达式引擎没有影响。
事实上,添加alternation|
和零长度断言^
只会降低你的性能。
更短的版本是:
[0-46-9]
字符类[]
中的连字符/破折号行为
连字符将指定字符类内的范围。您可以查找 ASCII 表以查看您正在执行的范围,例如:[ -Z]
实际上匹配 ASCII 33 到 127。
编辑:
好的,现在我对您的要求有了更深入的了解。 您需要具体说明您需要预先匹配的内容。
您可以使用负/正前瞻来做到这一点:
(?!.*?5.*?)(?!.*?\pAlpha.*?)(\pP*?$|\pL*?$)
这将在以下条件下匹配:
没有数字 5 没有来自 POSIX 类的字符:Alpha 具有 Unicode 属性“字母”或“标点符号”的任何字符【讨论】:
感谢您的帮助,但我想使用运算符(例如“是数字但不是 5”或“不是((非数字)或 5)”,如 en.wikipedia.org/wiki/De_Morgan's_laws 我可以使用 [^\ D5] 但不能使用 [^^\d5] 如果您只想匹配除 5 以外的任何数字,则没有理由使用[^^\d5]
。
我想在很多情况下使用它。例如,我想匹配所有的 \pL 而不是 \pAlpha 怎么办?
我想我明白你在追求什么。请参阅我的答案底部的编辑。【参考方案2】:
\d
就是 [0-9]
。请参阅Java regex reference 进行确认。
只需使用[0-46-9]
。您可以在regex fiddle 中尝试。
更新:
基于利用德摩根定律并根据 OP 的评论使用逻辑补码的要求,这是我对 [^\D5]
的逻辑补码的解释。
[^\D5]
本质上表示“NOT(非数字字符OR 5)”。将此与引用的Wikipedia article on De Morgan's laws 中的“NOT (A OR B)”进行比较。
那么我们需要的是“(NOT一个非数字字符)AND (NOT 5)”。将此与引用的 Wikipedia 文章中的“(NOT A) AND (NOT B)”进行比较。
这是我对使用a sequence of lookahead expressions for logical ANDing 逻辑补充[^\D5]
的解释:
(?!\D)(?!5).
不,它不使用^^
的双重否定;这不像你发现的那样工作;但是上面的逻辑补码本质上是我们想要的正则表达式-“(NOT一个非数字字符)AND(NOT 5)” -应用于单个字符(即.
)。
您可以在follow-on regex fiddle 中看到,上述逻辑补码产生的结果与[^\D5]
相同。
【讨论】:
感谢您的帮助,但我想使用运算符(例如“是数字但不是 5”或“不是((非数字)或 5)”,如 en.wikipedia.org/wiki/De_Morgan's_laws 我可以使用 [^\ D5] 但不能使用 [^^\d5] 好的,我将提供一个更新,我认为是[^\D5]
的逻辑补充,因为我认为它不是 [^^\d5]
。
@MinhLe:虽然我同意 Vasili Syrakis 作为一个实际问题,但考虑到是否可以这样做只是引起了你的兴趣(因为它引起了我的兴趣),我提供了更新内容我认为是[^\D5]
的真正合乎逻辑的补充。真是个脑筋急转弯!
我想在很多情况下使用它。例如,我想匹配所有 \pL 而不是 \pAlpha 怎么办?
对不起我的英语不好我在这里找到了答案***.com/questions/21928277/…非常感谢!以上是关于正则表达式匹配除 5 之外的所有数字字符的主要内容,如果未能解决你的问题,请参考以下文章