正则表达式加上和星之间的区别

Jor*_*pos 4 regex

我尝试从字符串中提取错误号,如"Wrong parameters - Error 1356":

 Pattern p = Pattern.compile("(\\d*)");
 Matcher m = p.matcher(myString);
 m.find();
 System.out.println(m.group(1));
Run Code Online (Sandbox Code Playgroud)

这不会打印任何东西,这对我来说就像来自Wiki*手段一样奇怪* - Matches the preceding element zero or more times

我也去了www.regexr.comregex101.com测试它,结果是一样的,这个表达没什么\d*

然后我开始测试一些不同的东西(在我提到的网站上进行的所有测试):

  • (\d)* 不起作用
  • \d{0,} 不起作用
  • [\d]* 不起作用
  • [0-9]* 不起作用
  • \d{4} 作品
  • \d+ 作品
  • (\d+) 作品
  • [0-9]+ 作品

所以,如果我能找到解释,我开始在网上搜索.我能找到的最好的是这里的量词部分,其中规定:

\d? Optional digit (one or none).
\d* Eat as many digits as possible (but none if necessary)
\d+ Eat as many digits as possible, but at least one.
\d*? Eat as few digits as necessary (possibly none) to return a match.
\d+? Eat as few digits as necessary (but at least one) to return a match.
Run Code Online (Sandbox Code Playgroud)

这个问题

由于英语不是我的主要语言,我很难理解差异(主要是(but none if necessary)部分).你也可以用正则表达式的专家解释一下吗?

我在SO上找到的最接近这个问题的是这一个:正则表达式:星重复运算符的占有量词,即\ d**但是这里没有解释它的区别.

Fra*_*itt 5

*量词匹配零次或多个出现次数.

在实践中,这意味着

\d*

将匹配每个可能的输入,包括空字符串.所以你的正则表达式在输入字符串的开头匹配并返回空字符串.