Java的正则表达式中有一些我不理解的东西。我有以下字符串(并且我需要“to Date”):
From Date :01/11/2011 To Date :30/11/2011;;;;;;;;;;;;;
我认为以下正则表达式(在 Perl 中)会匹配。
to\\s+date\\s*?:\\s*?([0-9]{2}[\\./][0-9]{2}[\\./][0-9]{2,4})
在 Java 中,此模式不匹配。但是如果我在前面和最后添加 a 就可以了.+
所以这种模式在 Java 中有效:
Pattern p = Pattern.compile(".+to\\s+date\\s*?:\\s*?([0-9]{2}[\\./][0-9]{2}[\\./][0-9]{2,4}).+", Pattern.CASE_INSENSITIVE);
^
我不明白的是:如果我在行尾添加 a (行首)和 a ,我很清楚第一个模式在 Java 中将不匹配$
。这意味着,模式必须匹配整行。但是没有它,第一个模式实际上应该匹配,因为如果我没有在前面和最后设置分隔符,为什么模式会关心超出此模式范围的字符串数据?这对我来说不合逻辑。在我看来,第一个模式的行为应该类似于 String 类的“包含”方法。我认为在 Perl 中也是如此。