一致が見つかると素晴らしい(500ナノ秒)正規表現がありますが、一致しない場合は(3秒以上)多くの時間がかかります。私はこれがバックトラッキングのためであると思われる。いくつかのオプションを試しましたが、を(.*)?
に変換するのと同じようにいくつかのドキュメントに基づいていますが、それは役に立ちませんでした。長い文字列のJavaでの正規表現パターンの一致処理
入力:非常に長い文字列 - 場合によっては5k文字。
正規表現が一致します.*substring1.*substring2.*
私は、私は他に何を試すことができ、パターンを事前にコンパイルして再使用して、整合していますか?
ここに私のコードスニペットがあります。私はこのメソッドを何百万もの異なる入力文字列で呼びますが、ほんの一握りの正規表現パターンを使用します。ケースは、あなたがそれを使用することができます十分に単純である場合
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);
}
あなたの目標は何ですか?あなたは正規表現を使用する必要がありますか? – Pshemo
あなたのコードを表示してください –
@Pshemo - はい、私は正規表現を使用する必要があります。 – user100001