【发布时间】:2012-04-04 07:08:42
【问题描述】:
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 中,此模式不匹配。但如果我在前面和最后添加.+
所以这种模式适用于 Java:
Pattern p = Pattern.compile(".+to\\s+date\\s*?:\\s*?([0-9]{2}[\\./][0-9]{2}[\\./][0-9]{2,4}).+", Pattern.CASE_INSENSITIVE);
我不明白的是:如果我在行尾添加^(行首)和$,我很清楚第一个模式在Java 中将不匹配。这意味着,模式必须匹配整行。但是没有它,第一个模式实际上应该匹配,因为如果我没有在前面和最后设置分隔符,为什么模式会关心超出此模式范围的字符串数据?这对我来说不合逻辑。在我看来,第一个模式的行为应该类似于 String 类的“包含”方法。我认为在 Perl 中也是如此。
【问题讨论】:
-
您可以在 regexplanet 测试 Java 正则表达式。我什至无法让您的模式在其中使用 .+ 。
标签: java regex pattern-matching