での正規表現のマッチングを重複しないでください?例えばは、Javaコードのこの作品は、試合を重ねる私を与えているいくつかの理由のJava
public static String replaceWithContext(String input, String leftContext, String rightContext, String newString){
Pattern pat = Pattern.compile("(" + leftContext + ")" + ".*" + "(" + rightContext + ")", Pattern.DOTALL);
Matcher matcher = pat.matcher(input);
StringBuffer buffer = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(buffer, "");
buffer.append(matcher.group(1) + newString + matcher.group(2));
}
matcher.appendTail(buffer);
return buffer.toString();
}
だからここに否定先読みを使用して、最終的な答えはだ、*は貪欲だった実現しませ用私の悪い:
leftContext rightContext rightContext はここで完全なコードがあります代わりに、2の1が一致するべきです
Pattern pat = Pattern.compile("(" +
leftContext + ")" + "(?:(?!" +
rightContext + ").)*" + "(" +
rightContext + ")", Pattern.DOTALL);
leftContextとrightContextは何ですか?失敗した試合の例を教えてください。 – marcog
正規表現マッチャーが重複するものを取得するのは、通常は少し難しい問題ですが、デフォルトでは起こりません。パターンの内容を見ることなく、何が起こっているのかを言うのは難しいです。マッチャーが文字列の同じ部分を2回以上通過するようにするには、基本的にルックアラウンドが必要です。あなたはそれをやっていますか? – tchrist
rightContextとleftContextはプレーンな文字列です。e。g leftContext = "ab" rightContext = "cd" – Ricardo