gpt4 book ai didi

regex - 正则表达式量词加号和星号的区别

转载 作者:行者123 更新时间:2023-12-04 23:21:36 26 4
gpt4 key购买 nike

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

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

这不会打印任何内容,这对我来说很奇怪,因为 *意味着 * - Matches the preceding element zero or more times来自 Wiki

我也去了 www.regexr.comregex101.com并测试它,结果是一样的,这个表达式没有任何内容 \d*
然后我开始测试一些不同的东西(所有测试都是在我提到的网站上进行的):
  • (\d)*不起作用
  • \d{0,}不起作用
  • [\d]*不起作用
  • [0-9]*不起作用
  • \d{4}作品
  • \d+作品
  • (\d+)作品
  • [0-9]+作品

  • 所以,我开始在网上搜索是否可以找到对此的解释。我能找到的最好的是 here在量词部分,其中指出:
    \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.

    问题

    由于英语不是我的主要语言,我无法理解其中的区别(主要是 (but none if necessary) 部分)。那么,您可以用简单的话解释一下正则表达式专家吗?

    我在 SO 上找到的最接近这个问题的是这个: Regex: possessive quantifier for the star repetition operator, i.e. \d**但这里没有解释差异。

    最佳答案

    *量词匹配零次或多次出现。

    在实践中,这意味着
    \d*
    将匹配所有可能的输入,包括空字符串。因此,您的正则表达式匹配输入字符串的开头并返回空字符串。

    关于regex - 正则表达式量词加号和星号的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24492483/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com