Aus irgendeinem Grund dieses Stück Java-Code gibt mir überlappende Spiele:Vermeiden überlappende Regex Matching in Java
Pattern pat = Pattern.compile("(" + leftContext + ")" + ".*" + "(" + rightContext + ")", Pattern.DOTALL);
jede mögliche Weise/Option, so dass es Überschneidungen Erkennung vermeidet? z.B. leftContext rightContext rightContext sollte anstelle von 2
Hier sein 1 Begegnung ist der vollständige Code:
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();
}
Also hier ist die endgültige Antwort eine negative Vorschau verwenden, meine schlecht für nicht ahnend * gierig war:
Pattern pat = Pattern.compile("(" +
leftContext + ")" + "(?:(?!" +
rightContext + ").)*" + "(" +
rightContext + ")", Pattern.DOTALL);
können Sie uns sagen, was leftContext und rightContext sind? Und geben Sie uns ein Beispiel für ein fehlgeschlagenes Spiel. – marcog
Den Regex-Matcher zu erfassen, um überlappende Dinge zu erfassen, ist normalerweise eine etwas knifflige Angelegenheit, nicht etwas, was standardmäßig passiert. Ohne den Inhalt der Muster zu sehen, ist es schwer zu sagen, was passiert. Es würde grundsätzlich Lookarounds erfordern, damit der Matcher mehr als einmal über den gleichen Teil der Saite gehen kann. Machst du das? – tchrist
rightContext und leftContext sind einfache Strings e.g leftContext = "ab" rightContext = "cd" – Ricardo