PHP regex: nach *.php suchen

lordfritte

Lieutenant
Registriert
Juli 2006
Beiträge
965
gelöst: regex: nach *.php suchen

Hallo ich möchte innerhalb einer php nach verwendeten php suchen, dazu möchte ich nach allen ausdrücken, innerhalb " oder ' nach *.php suchen.

Bisher habe ich sowas:

PHP:
$test = "'test.php?helpid=1' \"test2.php\"";
preg_match_all( '/\\([\"|\'](.*?)php[\"|\']\)/si',  $test, $matches );
var_dump($matches);

Raus kommen soll nur:
test.php
test2.php
 
Zuletzt bearbeitet:
Funktioniert, danke! ABER: Wie kann ich zusätzlich sagen, nur ausdrücke innerhalb "*" oder '*'?
 
\w*\.php()

@scraper004:
Der . muss maskiert werden, da er für jedes beliebige Zeichen steht.
 
Ein bisschen komplexer:

PHP:
preg_match_all('/(["\'])([^"\'\\.]+\\.php)(\\?[^"\']*)?\\1/u', '\'test.php?helpid=1\' "test2.php"', $matches);

Zum Verständnis:
(["\']) - matcht das erste Anführungszeichen und (durch die runden Klammern) und packt es in Gruppe 1
([^"\'\\.]+\\.php) - matcht den eigentlichen Dateinamen und packt ihn in Gruppe 2. Die ganzen Backslashes lassen den Ausdruck schwieriger aussehen als er ist.
(\\?[^"\']*)? - matcht den Query-String, falls einer existiert.
\\1 - Backreference auf Gruppe 1, matcht also das Anführungszeichen am Ende, falls es das gleiche ist wie am Anfang.

Die Liste der Dateinamen ist also nachher in $matches[2].


Edit: rumbalottes Lösung ist natürlich deutlich einfacher, meine matcht noch Dinge, die du nicht unbedingt brauchst :)
 
Ahh mist, ich noch einen wichtigen Fall vergessen!
Code:
../../system.php
das ../../ soll mit
 
Zurück
Oben