为什么这个正则表达式不能正常工作?
我有以下正则表达式:
^d{1,5}.*[^0-9][0-9]{5}$
和以下文字: 123 King Drive 12 OH 12345
我想匹配以1到5位数字开头并以5位数字结尾并且没有其他数字的字符串。 但我总是把整个文本作为一个匹配,尽管它应该跳过,因为123和12345之间的12 。
这是为什么发生? 不应该[^0-9]
做伎俩?
在你的正则表达式中:
^d{1,5}.*[^0-9][0-9]{5}$
和示例文本:
123 King Drive 12 OH 12345
-
^ d {1,5}匹配“123”
*匹配“King Drive 12 OH”
[^ 0-9]与“”匹配
[0-9] {5} $与“12345”匹配
正如其他人也建议的,像这样的事情可以避免这个问题,正如你明确说的那样(与使用“。*”不同)来匹配字符串中间的任何非数字:
^d{1,5}D+d{5}$
根据您对您的要求进行的描述,您似乎需要这样做:
^d{1,5}[^0-9]*[0-9]{5}$
.*
部分匹配任何内容,因此不排除数字。
你需要:
^d{1,5}D*d{5}$
它读作“1-5位数字,后跟任意数量的非数字字符,后跟5位数字”。 如果您想要至少一个非数字字符,请使用D+
。
你以前的正则表达式会匹配,因为' King Drive 12 OH'
匹配.*
和' '
会匹配单个字符[^0-9]
。