webentwicklung-frage-antwort-db.com.de

PHP using preg_replace: Fehler "Trennzeichen darf nicht alphanumerisch oder umgekehrter Schrägstrich sein"

Ich versuche, eine Zeichenfolge wie folgt zu nehmen:

$string = "This (1) is (2) my (3) example (4) text";

In allen Fällen, in denen eine positive ganze Zahl in Klammern steht, möchte ich diese einfach durch die ganze Zahl ersetzen.

Der Code, den ich jetzt verwende, lautet:

$result = preg_replace("\((\d+)\)", "$0", $string);

Aber ich bekomme immer eine

Trennzeichen darf nicht alphanumerisch oder umgekehrter Schrägstrich sein.

Warnung

Irgendwelche Gedanken? Ich weiß, es gibt andere Fragen, die diese Frage beantworten, aber mein Wissen über Regex reicht nicht aus, um auf dieses Beispiel umzusteigen. 

30
Christopher

Du bist fast am Ziel. Du benutzt:

$result = preg_replace("((\d+))", "$0", $string);
  • Der reguläre Ausdruck, den Sie als 1. Argument für preg_* Funktionsfamilie Angeben, sollte in einem Paar von Trennzeichen begrenzt werden. Da Sie keine Begrenzungszeichen verwenden, erhalten Sie diese Fehlermeldung.
  • ( und ) sind Metazeichen in einem regulären Ausdruck, was bedeutet, dass sie eine spezielle Bedeutung haben . Da Sie die literale Klammer und die schließende Klammer verwenden möchten, benötigen Sie Um sie mit einem \..__ zu entkommen, wird alles, was auf \ folgt, buchstäblich behandelt.
  • Sie können die Ganzzahl Mit \d+ richtig erfassen. Die erfasste Ganzzahl ist jedoch in $1 und nicht in $0. $0 hat die gesamte Übereinstimmung, dh Ganzzahl in Klammern.

Wenn Sie alle oben genannten Änderungen vornehmen, erhalten Sie:

$result = preg_replace("#\((\d+)\)#", "$1", $string);
42
codaddict

1) Sie benötigen ein Trennzeichen, der / funktioniert einwandfrei.

2) Sie müssen die Zeichen ( und ) mit Escapezeichen versehen, damit es nicht zu einer anderen Gruppierung führt.

3) Auch die Ersetzungsvariablen beginnen hier bei 1 und nicht bei 0 (0 enthält den vollständigen Text, der die Klammern enthalten würde).

$result = preg_replace("/\((\d+)\)/", "\\1", $string);

So etwas sollte funktionieren. Weitere Fragen finden Sie unter PHP preg_replace() Dokumentation - es ist wirklich gut.

5
animuson

Überprüfen Sie die Dokumente - Sie müssen vor und nach Ihrem Muster ein Trennzeichen verwenden: "/\((\d+)\)/"

Sie sollten auch die äußeren Klammern oben meiden, da sie Literale sind und keine verschachtelten, passenden Gruppen.

Siehe: preg_replace Handbuchseite

2
pix0r

Trennzeichen darf nicht alphanumerisch oder umgekehrter Schrägstrich sein.,

geben Sie Ihre Parameter in "/ .... /" wie unten angegeben ein. Andernfalls wird der Code ausgegeben. >>> Trennzeichen darf nicht alphanumerisch oder umgekehrter Schrägstrich sein.

$yourString='hi there, good friend';
$dividorString='there';
$someSstring=preg_replace("/$dividorString/",'', $yourString);

echo($someSstring);

// hi, good friend

.. arbeitete für mich.

0
Darian Harrison

Versuchen:

<?php
$string = "This (1) is (2) my (3) example (4) text";
$output = preg_replace('/\((\d)\)/i', '$1', $string);
echo $output;
?>

Die Klammern sind Sonderzeichen in regulären Ausdrücken. Du musst ihnen entkommen, um sie zu benutzen.

0
Atli