Java Regex找不到所有结果

时间:2015-09-01 18:46:57

标签: java regex java-8

使用Java 8,我有以下代码片段:
这里:

private ArrayList<MatchResult> allMatches(final Pattern p, final CharSequence input){
    ArrayList<MatchResult> results = new ArrayList<MatchResult>();
    Matcher matcher = p.matcher(input);
    while(matcher.find()){
        results.add(matcher.toMatchResult());
    }
    return results;
}

这里的主要方法是:

List<MatchResult> matches = allMatches(Pattern.compile(searchString),    searchable.getText());
System.out.println(matches.size());

searchString变量包含以下字符串:

(?im)Exception

可搜索的文字是:

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-28040: No matching authentication protocol

正如您所看到的,可搜索的文本中有3次我们会看到&#34; exception&#34;这个词。但是,Java只发现其中的两个。

代码的输出是:

2

关于此问题的另一条信息是 searchString 变量来自用户。

我的问题是关于比赛的数量。使用正则表达式时,Java似乎缺少一些匹配项。我提供的文字来自一个更大的文件,这不是第一个错过的文件,但它是我专注于希望有一些在哪里看的提示。这里发生了什么?为什么Java缺少一些匹配?我应该使用更准确的正则表达式搜索吗?

希望能帮助那些不熟悉&#34;(?im)&#34;在 searchString 变量中,我找到了资源here

1 个答案:

答案 0 :(得分:0)

发现问题,它不在我发布的代码中,因为这是专有代码,不能在公共领域中发布。但基本上 searchString 没有正确地发送到Pattern编译器,并且“(?im)”在到达之前被剥离了。谢谢大家的帮助。