2016-12-28 2 views
0

Ich bin ratlos, warum eine Pipe nicht funktioniert.Warum funktioniert das Rohr nicht?

/(?:<img.*?src=[\'"](.*?)[\'"].*?>)|(http(?:[^\s]*)\.(?:jpg|jpeg|gif|png))/ 

Hier ist die vollständige Pastebin des Codes: http://pastebin.com/J2y8jbsg

Zum Beispiel eine Verbindung wie zum Beispiel:

http://guardianlv.com/wp-content/uploads/2014/03/Robots-The-Possibilities-of-Artificial-Intelligence.jpg 

wird erfasst, wenn der zweite RegexMuster allein. (http(?:[^\s]*)\.(?:jpg|jpeg|gif|png))

Aber wenn ich es mit einem anderen hinzuzufügen, wie ursprünglich oben und in der Pastebin gezeigt, wie ein Rohr, alles, was ich bekommen, ist ein leeres Array:

Array ([0] => [1] =>) 

Kann das jemand erklären? Und auch eine Lösung wäre hilfreich :) Danke.

+0

Oh, verdammt dumm von mir lol. Bitte geben Sie eine Antwort und Sie bekommen es. Vielen Dank. Gute Nacht. – KrNel

Antwort

1

In Ihrem ersten Teil:

<img.*?src=[\'"](.*?)[\'"].*?> 
       ^ 

ist dies die erste Capture-Gruppe. Also:

(http(?:[^\s]*)\.(?:jpg|jpeg|gif|png) 

ist Ihre zweite Erfassungsgruppe. Also:

foreach ($matches[1] as $url) { 

ist falsch. Sie können:

foreach ($matches[2] as $url) { 

oder

foreach ($matches[0] as $url) { 

für die vollständige Übereinstimmung.

Demo: https://eval.in/705305

Regex101 Demo: https://regex101.com/r/KXjmo3/1

+0

Danke. Ich weiß nicht, ob du das zuerst kommentiert hast. Danke noch einmal. Rooky Fehler meinerseits. – KrNel

+0

@KrNel ja, ich kommentiert dann gelöscht. Bietet funktionale Beispiele, damit Sie das tatsächliche Problem sehen können. – chris85