2016-10-07 2 views
0

Ich versuche preg_match() zu verwenden, um eine Teilzeichenfolge in einer Zeichenfolge (die aus einer HTML-Code-Seite besteht), die mit amp-img> beginnt und zu isolieren in endet img>PHP wie preg_match() zu extrahieren Teilzeichenfolge beginnend mit x und endend mit y

$result = preg_match('/' . preg_quote('img>') . '.*?' . preg_quote('amp-img>') . '/', $text); 

Was ich hier falsch mache? Ich möchte $ result die Teil speichern zwischen img und amp-img

+0

Was ist der wahre '$ text'-Wert? Was sind 'x' und' y' (wenn es sich um Literalwerte handelt, gibt es keinen Sinn preg_quoting) –

+0

Ich schreibe einen HTML-AMP-HTML-Konverter, ich werde das Ticket bearbeiten @ WiktorStribiżew –

+0

Ok. Beachten Sie, dass '.' standardmäßig keine Zeilenumbruch-Symbole enthält. Möglicherweise benötigen Sie den Modifikator '/ s'. Wenn der Text Unicode ist, ist möglicherweise auch der Modifizierer '/ u' erforderlich. Auch kein Symbol in 'amp-img>' benötigt preg_quoting. [UPD] Und du musst ein preg_match mit einem preg_replace verwechseln. Siehe die Antwort unten. Im Moment ist mir nicht klar, was Sie vorhaben. –

Antwort

1

Manual:

Beschreibung

int preg_match (string $ Suchmuster, string $ subject [, array & $ treffer [, int $ flags = 0 [, int $ offset = 0]]])

Sucht nach einer Übereinstimmung mit dem im Muster angegebenen regulären Ausdruck.

Und Sie bieten '' als zweites Argument, und nicht mit dem Ergebnis.

Erwünschte Anruf würde wie folgt aussehen:

preg_match('/'.preg_quote('amp-img>').'.*?'.preg_quote('img>') .'/', $text, $result); 

Sie preg_replace Meinten?

+0

Sorry @Bvengerov Ich habe das behoben –

+0

@BarneyChambers Überprüfen Sie, wie das Ergebnis im bereitgestellten Code ist. Die Funktion würde 0, 1 oder false zurückgeben, und wenn Sie die Übereinstimmungen selbst möchten, sollten Sie eine Variable bereitstellen, um sie als das dritte Argument zu speichern. – BVengerov

+0

P.S. Die Regex sieht gut aus. – BVengerov

Verwandte Themen