Ich habe diesen Code:
$string1 = "My name is 'Kate' and im fine";
$pattern = "My name is '(.*)' and im fine";
preg_match($pattern , $string1, $matches);
echo $matches[1];
und wenn ich laufe, gibt es diesen Fehler zurück:
Warnung: preg_match () [function.preg-match]: Das Trennzeichen darf nicht alphanumerisch oder mit einem Backslash versehen sein
php
regex
preg-match
user547363
quelle
quelle
preg_match()
kann, stellen Sie sicher, dass die Reihenfolge der Variablen nicht versehentlich im Funktionsaufruf verwechselt wird , wenn Sie alle Ihre Argumente als Variablen übergeben, da dies mit ziemlicher Sicherheit auch dazu führt Fehler erscheint.$pattern = "/My name is '(.*)' and im fine/";
Antworten:
Sie benötigen ein Trennzeichen für Ihr Muster. Es sollte am Anfang und Ende des Musters wie folgt hinzugefügt werden:
quelle
\l
für Zeilenvorschub) in ihre Zeichen konvertiert, wodurch möglicherweise ein anderer Ausdruck als erwartet erzeugt wird. Verwenden Sie einfache Anführungszeichen. Siehe Beschreibung der PHP-Strings .\'
, das erforderlich wäre, wenn sie in einfache Anführungszeichen eingeschlossen wäre).Die Lösung (die in anderen Antworten nicht erwähnt wird - zumindest zum Zeitpunkt meines ursprünglichen Schreibens) ist, dass sich PHP, wenn es sich auf Trennzeichen bezieht, nicht auf die Trennzeichen bezieht, die Sie in Ihrem Code sehen (die Anführungszeichen sind), sondern auf das nächste Zeichen innerhalb der Zeichenfolge. (Tatsächlich habe ich dies noch nie in einer Dokumentation gesehen: Sie müssen es in Beispielen sehen.) Anstatt also eine Syntax für reguläre Ausdrücke zu haben, wie Sie es von vielen anderen Sprachen gewohnt sind:
PHP verwendet Zeichenfolgen und sucht dann in der Zeichenfolge nach einem anderen Trennzeichen:
Das Trennzeichen, auf das sich PHP bezieht, ist das
/
Zeichenpaar anstelle des'
Zeichenpaars. Wenn Sie also schreiben'something'
, nimmt PHPs
das beabsichtigte Trennzeichen und beschwert sich, dass Sie keine alphanumerischen Zeichen als Trennzeichen verwenden dürfen.Wenn Sie also (zum Beispiel) eine übergeben möchten, um
i
zu zeigen, dass Sie eine Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung wünschen, übergeben Sie diese innerhalb der Zeichenfolge, jedoch außerhalb der Regex-Begrenzer:Wenn Sie etwas anderes als
/
Ihr Trennzeichen verwenden möchten , können Sie dies tun, z. B. wenn Sie mit einer URL übereinstimmen und nicht alle Schrägstriche umgehen müssen:quelle
Sie müssen ein Trennzeichen für Ihren Ausdruck angeben. Ein Trennzeichen ist ein Sonderzeichen, das am Anfang und Ende Ihres Ausdrucks verwendet wird, um anzugeben, welcher Teil der Ausdruck ist. Auf diese Weise können Sie Modifikatoren und den Interpreter verwenden, um zu wissen, welcher Ausdruck und welche Modifikatoren sind. Wie in der Fehlermeldung angegeben, kann das Trennzeichen kein Backslash sein, da der Backslash das Escape-Zeichen ist.
und unter dem gleichen Beispiel, jedoch mit dem
i
Modifikator, der übereinstimmt, ohne zwischen Groß- und Kleinschreibung zu unterscheiden.Wie Sie sehen können,
i
befindet sich das außerhalb der Schrägstriche und wird daher als Modifikator interpretiert.Beachten Sie auch, dass Sie, wenn Sie einen Schrägstrich (/) als Trennzeichen verwenden, weiteren Verwendungen von / im regulären Ausdruck entgehen müssen, falls vorhanden.
quelle
Das Muster muss Trennzeichen haben. Trennzeichen können ein Schrägstrich (/) oder beliebige nicht alphanumerische Zeichen (#, $, *, ...) sein. Beispiele
quelle
Sie können auch die T-Regx-Bibliothek verwenden, die automatische Trennzeichen für Sie enthält:
quelle
Möglicherweise nicht mit dem ursprünglichen Codebeispiel verbunden, aber ich habe den Fehler "Trennzeichen darf nicht alphanumerisch oder Backslash sein" erhalten und hier gegoogelt. Grund: Ich habe die Reihenfolge der Parameter für preg_match gemischt. Das Muster war der zweite Parameter und die übereinstimmende Zeichenfolge war der erste. Achtung :)
quelle
Bitte versuchen Sie es damit
quelle