Java String.matches给出了错误的结果

时间:2013-12-19 09:47:28

标签: java regex

我正在使用String.matches来搜索输入字符串中存在的模式,但结果却是错误的。以下是我的代码。

public class Main {

    public static void main(String[] args) {
        String text =
                "WHERE  ( d.day_key = fact.day_key  \n" +
                    "AND d.full_date BETWEEN  '2013-10-01' AND '2013-12-05' \n" +
                    "AND advac.account_key = fact.advertiser_account_key  \n" +
                    "AND cam.campaign_key = fact.campaign_key  \n" +
                    "AND advac.account_name = 'abc.com') \n";

System.out.println(text.matches("(.*)full_date(.*)"));

    }

}

以上代码打印为false。我的正则表达式有什么问题吗?请指教。

2 个答案:

答案 0 :(得分:2)

如果您希望.也匹配换行符,则需要启用 dotall 模式。例如,这可以这样做:

text.matches("(?s)(.*)full_date(.*)");

您可以在JavaDocs中阅读更多内容。

答案 1 :(得分:1)

问题是您的输入包含换行符,因此您需要在正则表达式中传递右侧标志,否则点元字符将不匹配:

text.matches("(?s)(.*)full_date(.*)")