Gibt es eine Möglichkeit, einen String an regexp zu übergeben und sich nicht um die Ecranisierung von Sonderzeichen zu kümmern?
Zum Beispiel finde ich keine Zeile, die mit den Wörtern "Nord + West" beginnt, da "n" und "h +" ausgewählt werden sollten. Frage: Gibt es eine spezielle Kombination, um Text so zu schreiben, wie er ist?
/^s+(<some special combination> north+west)s+/i
oder kennst du vielleicht die funktion die meinen text richtig ecranisieren kann?
Antworten:
1 für die Antwort № 1In PHP und Perl können Sie verwenden Q...E
Trennzeichen, um Metazeichen in regulären Ausdrücken automatisch zu maskieren. Zitieren der Arzt:
Q
undE
kann verwendet werden, um reguläre Zeichen im Muster zu ignorieren. Beispielsweise:w+Q.$.E$
stimmt mit einem oder mehreren Wortzeichen überein, gefolgt von Literalen.$.
und am Ende der Schnur verankert.
0 für die Antwort № 2
Zusätzlich zu @ raina77ow AntwortWenn Sie pcre über eine Sprache wie PHP verwenden, die Musterbegrenzer benötigt, können Sie das nicht verwenden Q...E
Funktion, wenn Ihre Zeichenfolge das öffnende oder schließende Trennzeichen enthält. Zum Beispiel können Sie keine Muster schreiben wie:
/Qabc/defE/
~Qabc~defE~
[Qabc[defE]
[Qabc]defE]
(Qabc)defE)
(Qabc(defE)
Der einzige Weg ist, das zu benutzen preg_quote
Funktion und den Begrenzer zu setzen (nur wenn dies kein spezielles Regex-Zeichen ist) in seinem zweiten Parameter.