使用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。
答案 0 :(得分:0)
发现问题,它不在我发布的代码中,因为这是专有代码,不能在公共领域中发布。但基本上 searchString 没有正确地发送到Pattern编译器,并且“(?im)”在到达之前被剥离了。谢谢大家的帮助。