2013-03-10 24 views
7

Ich schrieb den folgenden Code (ja, es funktioniert) und fragte mich, warum ich nicht müssen die '<' und '>' innerhalb des Musters zu entkommen, da sie als 'spezielle' Zeichen gelten durch das PHP-Handbuch.php regex Sonderzeichen entkommen

http://www.php.net/manual/en/function.preg-quote.php

var_dump(preg_match('/<[A-Za-z][A-Za-z0-9]*>/', "<html>", $matches)); 

echo "<pre>"; 
var_dump(htmlentities($matches[0])); 
echo "</pre>"; 

Ausgang:

int(1) 
string(12) "<html>" 
+0

"Sonderzeichen" definieren. Alle Charaktere sind auf ihre Art besonders, weißt du? :) – tchrist

Antwort

15

Nur die unter this page aufgelisteten Zeichen müssen in PHP Regex Matching/Replacing maskiert werden.

Während < und > als delimiter wirken können, es braucht nicht in dem gegebenen Beispiel entgangen sein, weil Sie bereits / (Schrägstrich), die als ein delimiter haben.

auf die Verbindung in Frage Bezug

Die preg_quote() Funktion kann eine Zeichenfolge für die Injektion in ein Muster und seine optionalen zweiten Parameter können verwendet werden, um anzugeben, der als Trennzeichen zu entkommen verwendet werden, maskiert werden.

3

< und > sind nicht Meta-Zeichen ist den meisten Kontexten.

jedoch sie als solche für verwendet werden:

  • genannt Einfanggruppen (?P<name>)
  • Behauptungen Lookbehind (?<=...)

das ist also, warum preg_quote es sicher spielt und entgeht ihnen. Es ist wohl überflüssig, da das Entweichen von ( und ? ausreichend wäre. Aber es tut auch nicht weh.

+0

+1 richtige Antwort. –