为什么这个正则表达式不能正常工作?

我有以下正则表达式:

 ^d{1,5}.*[^0-9][0-9]{5}$

和以下文字: 123 King Drive 12 OH 12345

我想匹配以1到5位数字开头并以5位数字结尾并且没有其他数字的字符串。 但我总是把整个文本作为一个匹配,尽管它应该跳过,因为12312345之间的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]

链接地址: http://www.djcxy.com/p/86971.html

上一篇: Why does this Regex not work Properly?

下一篇: Should hyphens be escaped?