Why does this Regex not work Properly?
我有以下regex:
1 | ^\d{1,5}.*[^0-9][0-9]{5}$ |
以及以下文字:123 King Drive 12 oh 12345
我想匹配以1到5位数字开头,以5位数字结尾,并且它们之间没有其他数字的字符串。但我总是把整个文本作为匹配项,尽管它应该跳过,因为12介于123和12345之间。
为什么会这样?难道不是
根据您对需求的描述,您似乎想要:
1 | ^\d{1,5}[^0-9]*[0-9]{5}$ |
在你的正则表达式中:
1 | ^\d{1,5}.*[^0-9][0-9]{5}$ |
示例文本:
1 | 123 King Drive 12 OH 12345 |
——
^ D 1,5匹配"123"
*与"King Drive 12 Oh"匹配
[^0-9]与""匹配
[0-9]5$与"12345"匹配
正如其他人所建议的,类似这样的事情可以避免这个问题,正如您明确地说(与使用".*"不同)不匹配字符串中间的任何非数字:
1 | ^\d{1,5}\D+\d{5}$ |
你需要:
1 | ^\d{1,5}\D*\d{5}$ |
这表示"1-5位,后面是任意数量的非数字字符,后面是5位。"如果您需要至少1个非数字字符,请使用
您以前的regex将匹配,因为
问题是
1 | ^\d{1,5}[^0-9]+[0-9]{5}$ |
或者更紧凑
1 | ^\d{1,5}\D+\d{5}$ |