die folgende Zeichenfolge vor:durch RegEx Looping Spiele und ersetzen Sie das aktuelle Spiel
Er bestellen eine Pizza mit Sardellen. Leider war es nicht das, was er wollte. Außerdem ist Pizza mit Pilzen, Peperoni und Sardellen viel besser als die normale Pizza mit Sardellen.
Nehmen wir an, Sie müssen pizza with (ingredients)
zu pizza with (ingredients) on a thin crust
ändern.
, das zu tun, hatte ich einen Regex gesetzt:
(?i:pizza with [a-zA-Z,\s]*?anchovies)
Dies fängt drei Spielen. Dann gehe ich die on a thin crust
zu jedem Spiel hinzuzufügen, um den folgenden Code:
Pattern p = Pattern.compile("(?i:pizza with [a-zA-Z,\s]*?anchovies)");
Matcher m = p.matcher(string);
while(m.find())
{
string = string.replace(m.group(), m.group() + "on a thin crust.");
}
Der Ausgang dieses ist dann:
Er eine Pizza bestellt mit Sardellen auf einer dünnen Kruste auf einem dünnen Kruste. Leider war es nicht das, was er wollte. Außerdem ist Pizza mit Pilzen, Peperoni und Sardellen viel besser als die normale Pizza mit Sardellen auf einer dünnen Kruste auf einer dünnen Kruste.
Was ist passiert:
Das erste Spiel pizza with anchovies
das gleiche wie das letzte Spiel ist. Daher führte die Verwendung von String.replace
dazu, dass die erste und letzte Übereinstimmung in pizza with anchovies on a thin crust
geändert wurde. Da wir alle Übereinstimmungen durchgehen, wird die letzte Übereinstimmung immer noch auftreten und die Ersetzungsfunktion wird auch die erste Übereinstimmung ersetzen (da die erste Übereinstimmung und die letzte Übereinstimmung gleich sind). Daher erhalten wir doppelt on a thin crust
.
Q:
Gibt es eine Möglichkeit nur ein Regex Spiel am aktuellen Spiel zu ersetzen?
Wenn Sie meine Antwort hilfreich/für Sie arbeiten finden, bitte erwägen Sie, upvoting/accepting. –