möchte das Wort i.v.
case insensitive
habe Muster
%Vor% aber wollen eine Wortgrenze am Ende
Das obige Muster schlägt fehl, da es zu
passt
i.v.x
aber wenn ich versuche, eine Arbeitsgrenze zum Ende hinzuzufügen
%Vor% es scheitert darin, dass es nicht einmal i.v.
wie ich denke, das \b
isst das wörtliche. wie . ist ein Wort brechen
brauche \.
, um gierig zu sein
Ich möchte mit mir übereinstimmen sam i.v. sam
möchte nicht mit einem übereinstimmen
sam.i.v.
i.v.sam
Das kommt näher
%Vor%Aber es findet nicht i.v. am Ende einer Zeile
\b
stimmt nur zwischen einem alphanumerischen Zeichen und einem nicht alphanumerischen Zeichen (oder dem Anfang / Ende eines Strings) überein. Daher stimmt es nach einem .
nicht überein, es sei denn, ein alphanumerisches Zeichen folgt unmittelbar auf diesen Punkt.
Wenn Sie sicherstellen möchten, dass nach dem Punkt kein Leerzeichen folgt, können Sie dies mithilfe einer angeben negative Vorausschau Behauptung :
%Vor% (?!\S)
bedeutet "Stellen Sie sicher, dass das nächste Zeichen kein Nicht-Leerzeichen ist".
Das mag ein bisschen verschlungen klingen - warum das doppelte Negativ? Warum nicht (?=\s)
was bedeutet "Stellen Sie sicher, dass das nächste Zeichen ein Leerzeichen ist"? Nun, es gibt einen feinen Unterschied: Die zweite Version benötigt ein Leerzeichen, um dort zu sein; das bedeutet, dass die Regex am Ende der Zeichenfolge nicht übereinstimmen würde. Der erste Regex behandelt auch diesen Eckfall.
Wenn das Konzept der "Wortgrenze" generell "space-limited" bedeutet, dann müssen Sie auch die erste \b
ersetzen:
oder der Regex passt zu sam.i.v.
, was Sie nicht zu haben scheinen.
Über Ihre aktuelle Regex:
Sie müssen nicht \b
nach Punkt haben, da dot nicht als Wortzeichen betrachtet wird, aber natürlich muss der Punkt maskiert werden:
Aber Sie benötigen \b
vor i
, um sicherzustellen, dass es z. B. nicht übereinstimmt. hi
BEARBEITEN: (basierend auf Ihren weiteren Änderungen)
Probieren Sie diese Regex:
%Vor%