我有一个正则表达式,当匹配成功时非常快(500纳秒),但是在没有匹配的情况下需要很长时间(超过3秒)。我怀疑这可能是由于回溯引起的。我尝试了一些选项,比如根据一些文档将
输入:一个非常长的字符串 - 在某些情况下有5k个字符。
要匹配的正则表达式:
这是我的代码片段 - 我将使用数百万个不同的输入字符串调用此方法,但只有少数正则表达式。
这是我的方法:
.*
转换为(.*)?
,但没有帮助。输入:一个非常长的字符串 - 在某些情况下有5k个字符。
要匹配的正则表达式:
.*substring1.*substring2.*
我正在预编译模式并重复使用匹配器,我还能尝试什么?这是我的代码片段 - 我将使用数百万个不同的输入字符串调用此方法,但只有少数正则表达式。
private static HashMap<String, Pattern> patternMap = new HashMap<String, Pattern>();
private static HashMap<String, Matcher> matcherMap = new HashMap<String, Matcher>();
这是我的方法:
public static Boolean regex_match(String line, String regex) {
if (regex == null || line == null) {
return null;
}
if (!patternMap.containsKey(regex)) {
patternMap.put(regex, Pattern.compile(regex));
matcherMap.put(regex,patternMap.get(regex).matcher(""));
}
return matcherMap.get(regex).reset(line).find(0);
}
substring1[^s]*(?:s(?!ubstring2)[^s]*)*substring2
。 - Wiktor Stribiżew