为什么 Java 正则表达式"|"为任何输入字符串找到匹配的子字符串?



我试图理解为什么以" |"结尾的正则表达式为何(或简单的" |"本身)将在最后一个字符匹配之后找到一个带有启动索引0的匹配子字符串,并结束"结束"(根据Matcher的Javadoc),"0。

以下代码证明了这一点:

public static void main(String[] args) {
    String regExp = "|";
    String toMatch = "A";
    Matcher m = Pattern.compile(regExp).matcher(toMatch);
    System.out.println("ReqExp: " + regExp + 
            " found " + toMatch + "(" + m.find() + ") " +  
            " start: " + m.start() +
            " end: " + m.end());
}

输出是:

ReqExp: | found A(true)  start: 0 end: 0

我对它甚至是有效的正则表达式的事实感到困惑。并且对开始和结尾都是0的事实感到困惑。

希望有人可以向我解释。

正则表达式中的管道表示"或"。因此,您的正则表达式基本上是"(空字符串)或(空字符串)"。它成功地在字符串开头找到一个空字符串,一个空字符串的长度为0。

最新更新