- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试做的第一件事是让正则表达式匹配我不想要的内容。这样,我可以将其翻转为不接受相同的输入。这是我想出这个正则表达式的第一部分的地方。
此时我想做的是将它们组合在一起以寻找这两个条件。但是,当我这样做时,它似乎中断了,并且只匹配 9 个数字,这些数字在整个 WITH 破折号中都是相同的: "^(\d)\1{2}-(\d)\1{1}-(\d)\1{3}$|^(\d)\1{8}$"。这可以在这里看到:https://regex101.com/r/lPnksf/1 .
我在这里可能有点超前了,但为了尽可能多地展示我的工作,我也尝试分别翻转这些正则表达式,但也没有按预期工作。
我希望这两个表达式(翻转时)匹配所有数字不相同的任何 9 位数字(带或不带破折号)。然而这根本没有发生。
这是我想出的最后一个正则表达式,它显然没有达到我的预期:"^(?!(\d)\1{2}-(\d)\1{1} -(\d)\1{3})$|^(?!(\d)\1{8})$"。可以在这里看到:https://regex101.com/r/9eHhF5/1
归根结底,我想将这两个表达式与这个表达式(已经按预期工作)结合起来:"^(?!000|666|9\d\d)\d{3}- (?!00)\d\d-(?!0000)\d\d\d\d$”。可以在这里看到:https://regex101.com/r/AdRI8i/1 .
我对正则表达式还是很陌生,我真的很想了解为什么我不能简单地将条件包装在 (?!...) 中以匹配相反的条件。
提前致谢
最佳答案
您要做的不是翻转,而是反转正则表达式逻辑。
是的,要反转模式逻辑,您应该使用负前瞻,但有一些注意事项。
首先,字符串 anchor 的 $
结尾:如果它在“正”正则表达式的结尾,它也必须移动到反向模式中的先行。因此,您的 ^(?!(\d)\1{8})$
正则表达式必须写成 ^(?!(\d)\1{8}$)
。您的第二个正则表达式也是如此。
接下来,请注意每个后续捕获组都会获得一个递增的 ID 号,因此当您使用 OR |
运算符“加入”模式时,您不能保持相同的反向引用。您必须调整这些 ID 以在新的正则表达式中反射(reflect)它们的新值。
因此,您想要匹配一个匹配 ^(?!000|666|9\d\d)\d{3}-(?!00)\d\d-(?!0000 )\d\d\d\d$
首先(注意 \d\d\d\d
= \d{4}
),然后你可以使用前瞻添加限制:
(?!(\d)\1{8}$)
- 如果从当前位置立即匹配相同的 9 位数字,然后字符串结尾出现,则匹配失败(?!(\d)\2\2-(\d)\2-(\d)\2{3}$)
-(注意 ID 递增延续)失败match if, 立即从当前位置匹配到与第一个相同的3位,-
,相同的2位,-
,相同的5位,然后是字符串结尾来了。因此,按照您的逻辑,您可以使用
^(?!(\d)\1{8}$)(?!(\d)\2\2-(\d)\2-(\d)\2{3}$)(?!000|666|9\d\d)\d{3}-(?!00)\d\d-(?!0000)\d{4}$
参见 regex demo
由于前瞻是非消耗模式,即正则表达式索引在匹配它们之前的模式序列后保持在相同位置,所以 3 前瞻将全部在字符串的开头尝试(参见 ^
anchor )。如果开头的三个否定前瞻中的任何一个失败,则整个字符串匹配将立即失败。
关于regex - 如何创建一个正则表达式,不允许社会保险号中出现相同的 9 个重复数字(带或不带连字符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69097636/
// // Social.h // Social // // Copyright (c) 2012 Apple Inc. All rights reserved. // #import #im
我有两个简单的 MySQL 表:用户和关系。 关系表: user_id int(10) unsigned NO PRI friend_id int(10) unsigned
当我访问 127.0.0:8000/associate/twitter 时,我的 django 会获取除电子邮件地址之外的所有 twitter 信息。 访问127.0.0:8000/associate
当我尝试 http://127.0.0.1/login/twitter 时,我看到它会转到 Twitter 进行身份验证,但我看到以下错误 不正确的身份验证服务 我检查了很多次,TWITTER_CON
我是一名优秀的程序员,十分优秀!