Ich habe den gesamten HTML-Code einer Seite geladen und möchte alle URLs abrufen, die mit http beginnen und mit pdf enden. Ich habe folgendes geschrieben, was nicht funktioniert hat:
%Vor% Ich bin ziemlich neu in Regex, aber aus dem, was ich gelernt habe, markiert ^
den Anfang eines Musters und $
markiert das Ende. Was mache ich falsch?
Sie müssen den Zeichen in der Mitte der URL entsprechen:
%Vor% \b
entspricht einer Wortgrenze
^
und $
markieren Anfang und Ende der gesamten Zeichenkette . Du willst sie nicht hier haben.
[...]
entspricht einem beliebigen Zeichen in den Klammern
\w
entspricht einem beliebigen Wortzeichen
+
entspricht einem oder mehreren der vorherigen Übereinstimmung
?
macht die +
eher faul als gierig
preg_match( '/http[^\s]+pdf/', $html, $matches );
Entspricht http
gefolgt von nicht ( [^...]
) Leerzeichen ( \s
) einmal oder mehrmals ( +
) gefolgt von pdf
Probieren Sie das aus,
%Vor% Sie müssen den Teil zwischen http
und pdf
abgleichen, was .*?
tut.
^
entspricht dem Anfang der Zeichenfolge und $
dem Ende, aber das ist nicht das, was Sie wollen, wenn Sie diese Links aus einem längeren Text extrahieren möchten.
\b
passt auf Wortgrenzen
Aktualisieren
Der Vollständigkeit halber würde das .*?
immer noch zu viel übereinstimmen, also mit \S*
\S
entspricht einem Nicht-Leerzeichen-Zeichen
Versuchen Sie Folgendes:
%Vor% Beachten Sie, dass Sie die preg_match_all()
-Funktion hier verwenden müssen, da Sie versuchen, mehr als ein Vorkommen zu finden. ^
und $
funktionieren nicht, da sie nur auf Zeilen- oder Dateigrenzen angewendet werden (abhängig von den verwendeten Modifikatoren).
Tags und Links php regex preg-match