我尝试从字符串中提取错误号,如"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.com和regex101.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**但是这里没有解释它的区别.