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

Regex 为什么这个正则表达式不能正常工作?,regex,Regex,我有以下正则表达式: ^\d{1,5}.*[^0-9][0-9]{5}$ 以及以下文字:123国王大道12 OH 12345 我想匹配以1到5位数字开始,以5位数字结束的字符串,它们之间没有其他数字。但是我总是将整个文本作为一个匹配项,尽管它应该跳过,因为12介于123和12345之间 为什么会这样?[^0-9]不应该这样做吗?问题是*哪个匹配任何东西,那么 ^\d{1,5}[^0-9]+[0-9]{5}$ 或者更紧凑 ^\d{1,5}\D+\d{5}$ \D匹配任何非数字。如果希望允许

我有以下正则表达式:

 ^\d{1,5}.*[^0-9][0-9]{5}$
以及以下文字:123国王大道12 OH 12345

我想匹配以1到5位数字开始,以5位数字结束的字符串,它们之间没有其他数字。但是我总是将整个文本作为一个匹配项,尽管它应该跳过,因为12介于12312345之间


为什么会这样?
[^0-9]
不应该这样做吗?

问题是
*
哪个匹配任何东西,那么

^\d{1,5}[^0-9]+[0-9]{5}$
或者更紧凑

^\d{1,5}\D+\d{5}$

\D
匹配任何非数字。如果希望允许字符串的起始和结束数字之间不包含任何内容,可以使用
\D*

根据您对需求的描述,您似乎希望:

^\d{1,5}[^0-9]*[0-9]{5}$
*
部分匹配任何内容,因此不排除数字。

您需要:

^\d{1,5}\D*\d{5}$
其内容为“1-5个数字,后跟任意数量的非数字字符,后跟5个数字”。如果至少需要1个非数字字符,请使用
\D+

您以前的正则表达式将匹配,因为
'King Drive 12 OH'
将匹配
*
'
将匹配正则表达式中的单个字符
[^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}$

为什么会有。*如果你不想要所有东西?@dystroy我补充道。*因为在门牌号(123)和大声朗读正则表达式之间肯定有一些字符,它说“1-5位,后跟任意字符的任何数字,后跟1个非数字字符,后跟5位。”谢谢,如果我还想检查关键字“Drive”,我应该在正则表达式中添加什么?^\d{1,5}\d+[dD]rive\d+\d{5}$---我已经使用了[dD],以防您也要包含未大写的单词。