Einen Teil eines Regex-Ausdrucks als nicht-Sonderzeichen behandeln

438
Dan W

Nehmen wir an, ich habe einen Regex-Ausdruck, der einige der Sonderzeichen verwendet, aber auch einen Teil mit "normalem" Text, der zufällig einige Symbole enthält. Nehmen wir auch an, ich bin zu faul, um jedem "Möglichen" zu entgehen "Sonderzeichen im Teil" normaler Text ".

Wie kann ich das "normale" Textbit einschließen, damit Regex nicht anfängt, einen Anfall zu werfen, wenn es der Meinung ist, dass es auf einen speziellen Charakter gestoßen ist (wenn es wirklich nicht der Fall ist)?

Nehmen wir als Beispiel an, ich suche nach dem Text:

.*Hello it's true that ([6*.5]^2=9).

Ich möchte auf keinen Fall das Escape-Zeichen jedes Mal mühsam verwenden, wenn eine der Sonderzeichen in dieser Mathematiksektion erscheint (oder der Apostroph in "Don't"). Auf der anderen Seite möchte ich das .*Bit am Anfang als Sonderzeichen behandeln.

Kann ich den Hello it's true that ([6*.5]^2=9)Abschnitt also so einschließen, dass Regex ihn als normalen Text behandelt und nicht als besonderen Text?

Ich benutze Notepad ++, um Suchen und Ersetzen durchzuführen, aber hoffentlich wird jede Antwort gleich sein, unabhängig vom Programm.

3

2 Antworten auf die Frage

1
Thomas Dickey

Mit einigen Tools können Sie ändern, ob Sonderzeichen standardmäßig mit Escapezeichen versehen werden müssen. Zum Beispiel vi(und Klone) gibt es einen magicModus, der dies steuert. Auf diese Weise können Sie die benötigte Flucht reduzieren.

Wow, also gibt es nichts in der Standardspezifikation? Allein diese eine Sache bringt mich dazu, Regex mehr zu hassen als alles andere, was sonst falsch wäre. Dan W vor 8 Jahren 0
Jemand erinnert sich vielleicht an einen anderen Fall. Das vi "magic" -Feature spiegelt sich übrigens in den Unterschieden zwischen BREs und EREs (grep vs egrep) usw. wider. Thomas Dickey vor 8 Jahren 0
Ich habe herausgefunden, dass dies mit den meisten Regex-Geschmacksrichtungen möglich ist. Verbitterung beginnt zu verblassen ... :) Siehe meine eigene Antwort auf dieses Q. Dan W vor 8 Jahren 0
Nicht genau: Es ist die von Perl abgeleitete Variante, die pcre bietet, und die neuesten Versionen von Notepad ++. POSIX-Regexen tun das nicht (obwohl es einen Aspekt gibt, den ich übersehen habe). Perl ist natürlich kein POSIX. Thomas Dickey vor 8 Jahren 0
1
Dan W

Versuchen Sie \Q, ein Literal zu beginnen, und beenden Sie mit \E.

Dies funktioniert mit vielen Regex-Varianten, obwohl Java beispielsweise Probleme haben kann.

Informationen erhalten Sie von: http://www.regular-expressions.info/characters.html

Ich nehme Websites wie diese vorsichtig. [Notepad ++ 6 Versionshinweise] (https://notepad-plus-plus.org/news/notepad-6.0-release.html) wäre ein guter Ausgangspunkt. Thomas Dickey vor 8 Jahren 0