2016-05-31 8 views
0

Ich versuche preg_match_all mit mehreren Mustern darin zu verstehen, also habe ich HTML-Zeichenfolge Variable und Muster erstellt.preg_match_all mehrere Muster verlässt leere Array-Werte

Alles wie Trimmen funktioniert gut, aber es gibt einige Array-Schlüssel mit leeren Werten wegen mehrerer Muster aus. Wenn Sie wissen, warum es so ist, sagen Sie es mir bitte und zeigen Sie mir auch, wie es repariert werden muss.

Mein Code:

<?php 
     $cource = "<div><a href='test1'> <img src=\"test2\" /> <img src='test3' > <script src='test4'> <link href='test5'> </div>"; 

     preg_match_all('/src=["\']([^"\']+)|href=\'([^\']+)/',$cource, $result); 

     var_dump($result); 
?> 

Ausgang:

enter image description here

+0

Das regex nicht gültig ist, sind Sie sicher, dass dies das ist Muster, das du benutzt? – Dale

+0

Tut mir leid, ich habe es bearbeitet, jetzt ist es korrekt – Dest

+0

So soll die Ausgabe strukturiert sein. Sie erhalten ein Array pro '(...)' Capture-Gruppe - und es wird jeweils nur die passende Gruppe aufgefüllt. Vergleichen Sie die Alternativen mit einer No-Capture-Gruppe '(?: X = | y =)' – mario

Antwort

0

Sie sind der Verwendung von zwei einfangende Gruppen, leere Werte Ursache immer

  • 1. für src ist
  • 2. ist für href

daher sind Sie leere Werte wie pro Ihre Daten immer als erstes Element Attribut href hat man src leer bekam (wie es es nicht hat), so weiter und so fort.

Sie können die Ergebnisse in einer Capture (Second) -Gruppe erfassen. Die erste Gruppe enthält Referenzen für die Attribute, aus denen sie entnommen wurde.

$cource = "<div><a href='test1'> <img src=\"test2\" /> <img src='test3' > <script src='test4'> <link href='test5'> </div>"; 

preg_match_all('/(href|src)=["\']([^"\']+)/',$cource, $result); 

Falls Sie benötigen Referenzattribute nicht, Sie nicht Erfassungsgruppe ?:

preg_match_all('/(?:href|src)=["\']([^"\']+)/',$cource, $result); 

In Aktion verwenden können: https://eval.in/580585

+1

Danke, mein Herr. Es funktioniert perfekt. – Dest

+0

@Dest Sie sind willkommen, überprüfen Sie es für die Erklärung, warum erhalten Sie leere Werte, ich habe meine Antwort aktualisiert –

+0

Ich sah es danke wieder verstehe ich jetzt. – Dest