Heim >Backend-Entwicklung >PHP-Tutorial >PHPs preg_match_all() kann nicht mit der angegebenen Zeichenfolge übereinstimmen?

PHPs preg_match_all() kann nicht mit der angegebenen Zeichenfolge übereinstimmen?

WBOY
WBOYOriginal
2016-09-29 09:33:001610Durchsuche

Demo:

<code>$html='<div class="p-img"><a href="url"></a></div><div class="p-img"><img src="xx"></div>';

preg_match_all('/<div class="p-img">(.*?)<\/div>/', $html, $out);

var_dump($out);
</code>

Ich hoffe, dass die Zielzeichenfolge $html mit

übereinstimmt, aber ich habe festgestellt, dass die letzte Ausgabe $out immer leer ist. Wie kann ich alle Ergebnisse korrekt abgleichen? Ich habe eine Anleitung von einem regelmäßigen Experten für Regelmäßigkeit erhalten


Zusätzliche Erklärung nach dem Finden der Antwort:

Verwenden Sie den Crawler, um die Dom-Struktur aus dem Internet abzurufen. Sie enthält viele Leerzeichen und Zeilenumbrüche. Wenn Sie mit dem Ziel-HTML übereinstimmen möchten, müssen Sie nach dem regulären Ausdruck das Musterkorrektursymbol hinzufügen

<code>preg_match_all('/<div class="p-img">(.*?)<\/div>/is', $html, $out);</code>
/ich ignoriere die Groß-/Kleinschreibung

/s behandelt die Zeichenfolge als einzelne Zeile und das Zeilenumbruchzeichen als gewöhnliches Zeichen

Antwortinhalt:

Demo:

<code>$html='<div class="p-img"><a href="url"></a></div><div class="p-img"><img src="xx"></div>';

preg_match_all('/<div class="p-img">(.*?)<\/div>/', $html, $out);

var_dump($out);
</code>
Ich hoffe, dass die Zielzeichenfolge $html mit
übereinstimmt, aber ich habe festgestellt, dass die letzte Ausgabe $out immer leer ist. Wie kann ich alle Ergebnisse korrekt abgleichen? Ich habe eine Anleitung von einem regelmäßigen Experten für Regelmäßigkeit erhalten


Zusätzliche Erklärung nach dem Finden der Antwort:

Verwenden Sie den Crawler, um die Dom-Struktur aus dem Internet abzurufen. Sie enthält viele Leerzeichen und Zeilenumbrüche. Wenn Sie mit dem Ziel-HTML übereinstimmen möchten, müssen Sie nach dem regulären Ausdruck das Musterkorrektursymbol hinzufügen

/ich ignoriere die Groß-/Kleinschreibung
<code>preg_match_all('/<div class="p-img">(.*?)<\/div>/is', $html, $out);</code>

/s behandelt die Zeichenfolge als einzelne Zeile und das Zeilenumbruchzeichen als gewöhnliches Zeichen

Ausgabe:

<code>$html='<div class="p-img"><a href=\'url\'></div><div class="p-img"><img src=\'xx\'></div>';

preg_match_all('/<div\sclass="p\-img">(.*?)<\/div>/is', $html, $out);

var_dump($out);</code>

Was soll ich sagen? Das
<code>array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(39) "<div class="p-img"><a href='url'></div>"
    [1]=>
    string(39) "<div class="p-img"><img src='xx'></div>"
  }
  [1]=>
  array(2) {
    [0]=>
    string(14) "<a href='url'>"
    [1]=>
    string(14) "<img src='xx'>"
  }
}</code>
in Ihrem $html sollte

sein und / sollte nicht in /' maskiert werden 'Ich kann es nicht ausführen. Wissen Sie, ob es ein Problem mit Ihrer Grammatik oder Regelmäßigkeit ist?

Die Antwort ist, wo $html definiert ist.

-Nummer muss maskiert werden

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn