Ich habe diese Regex, die Satzbegrenzer entfernen soll ( .
und ?
):
Es funktioniert gut, es konvertiert
"I am Java developer."
bis "I am Java developer"
"Am I a Java developer?"
bis "Am I a Java developer"
Aber nach der Bereitstellung haben wir festgestellt, dass es auch andere Punkte im Satz als
ersetzt "Hi.Am I a Java developer?"
wird "HiAm I a Java developer"
Warum passiert das?
Die Pipe ( |
) hat die niedrigste Priorität aller Operatoren . Also deine Regex:
wird wie folgt behandelt:
%Vor% entspricht einer .
beliebigen Stelle in der Zeichenfolge und entspricht ?
am Ende der Zeichenfolge.
Um dies zu beheben, müssen Sie .
und ?
zusammen wie folgt gruppieren:
Sie können auch verwenden:
%Vor% Innerhalb einer Zeichenklasse werden .
und ?
buchstäblich behandelt, so dass Sie nicht entkommen müssen.
Ihr Problem liegt an der Priorität von alternation operator |
. Ihr regulärer Ausdruck bedeutet, dass Sie einen der folgenden Werte verwenden:
.
an beliebiger Stelle oder
?
am Ende einer Zeile. Verwenden Sie stattdessen eine Zeichenklasse:
%Vor%Tags und Links string java regex operators operator-precedence