【问题标题】:Behaviour of Java RegExp '?' and '+' [duplicate]Java RegEx '?' 的行为和'+' [重复]
【发布时间】:2020-12-19 06:17:55
【问题描述】:

为什么这个正则表达式评估返回 'false' ? Pattern.matches("[abc]?", "abc") // 错误。

根据定义“?”评估字符串是否与 a 或 b 或 c 的“零”或“一个”匹配。 据我了解,a、b、c 中的每一个都恰好出现“一次”,所以它应该是真的,但它是假的。为什么?

如果是下一行代码 - Pattern.matches("[abc]+", "abc") / 返回 true (评估 a 或 b 或 c 的一次或多次出现) 这是正确的,因为 a、b、c 各出现一次。

只要出现一次,'?'或“+”都应该评估相同。我无法理解在“?”的情况下如何评估“假”。 谁能解释一下?

import java.util.regex.*;
public class Main
    {
        public static void main(String[] args) {
            System.out.println(Pattern.matches("[abc]?", "abc")); //false (a or b or c comes zero or one time);
            System.out.println(Pattern.matches("[abc]+", "abc")); //true  (a or b or c comes one or more time)
    }
}

【问题讨论】:

    标签: java regex


    【解决方案1】:

    正则表达式[abc]? 匹配零个或一个字符,可以是abc。因此它与abc 不匹配。正匹配将是空字符串、abc

    另一方面,[abc]+ 匹配一个或多个字符,可以是 abc。因此,它可以匹配3个字符串abcaaabbba 也会匹配。

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多