2016-05-16 12 views
1

Also versuche ich nach Übereinstimmung zu suchen und wenn es passt, extrahiere einen Variablennamen aus einer Zeichenkette. Dem Variablennamen sollte "$" vorangestellt werden und kann nicht mit "\" maskiert werden, so sollte beispielsweise "$ name" "name" entpacken und "\ $ name" oder "name" sollte nicht übereinstimmen. Heres der Befehl:PHP lehnt diesen regulären Ausdruck ab

$match = preg_match("/^(?<!\\)(\$.*)$/", $potential, $name); 

I aufgebaut und getestet mit ihm regex101.com und es funktioniert es, aber, ich einen Fehler von PHP immer sagen

„preg_match(): Compilation failed: fehlt) bei Offset 13 in ... "

und ich habe keine Ahnung, was es bezieht sich auf.

Antwort

1

Mein Gedanke ist, dass man bestimmte Zeichen entkommen müssen den regulären Ausdruck in PHP

$match = preg_match('/^(?<!\\\\)(\$.*)$/', $potential, $name);

bearbeiten zu konsumieren: Der Backslash ist das Escape-Zeichen in beide Regex und PHP, müssen Sie doppelt entkomme den Schrägstrichen.

+1

Recht so escape für beide Regex und für das String-Format in PHP? – user81993

+0

Ja genau, Backslash ist das Escape-Zeichen für PHP und Regex – Scuzzy

0

Sie eine Klammer entkam haben:

preg_match('/^(?<!\\) <----HERE 

FYI können Sie mehrere andere Trennzeichen verwenden, um Ihre regex ist besser lesbar zu machen. Da wir oft Schrägstriche und entflohene Zeichen haben, ist es schwierig mit '/' zu lesen. Verwenden Sie '#' oder '~' oder sogar '@', um die Lesbarkeit zu verbessern.

Auch Ihr Online-Regex-Tool der Wahl, es hängt davon ab, welche reguläre Ausdruck Implementierung (und Version) der Dienst verwendet, wie genau Ihre Ergebnisse. Ich benutze immer rugular.com (Uses PCRE), aber für PHP können Sie phpliveregex.com verwenden

Verwandte Themen