[PHP] RegEx findet keine übereinstimmung

krizzelfix

Commander
Registriert
Sep. 2005
Beiträge
2.626
Hallo CB'ler,

ich hab ein RegEX geschrieben, welches mir aus einem SQL Statement den Tabellenamen sucht.
PHP:
$pattern = '~^(?:CREATE|INSERT).+`(.+)`.*$~isU';
$return = preg_match_all($pattern, $query, $res, PREG_SET_ORDER);
Wenn ich das im RegEx-Evaluator ausführe wird die Tabelle gefunden, nur wenn ich das auf meinem Server ausführe bekomme ich immer keine Übereinstimmung.

Bin für jede Hilfe dankbar.

Grüße

tewes

//EDIT: Keiner eine Idee/Tipp? :/
 
Zuletzt bearbeitet:
//EDIT: Keiner eine Idee/Tipp? :/

Ich schreibe hier jetzt einfach mal "Nein!" hin, weil ich es von mir so kenne, dass mir das lieber ist als wenn gar nichts kommt, weil dann hat man wenigstens die Gewissheit, dass sich mal jemand Gedanken drüber gemacht hat. :)

Wenn ich das im RegEx-Evaluator ausführe wird die Tabelle gefunden
Das ist halt besonders dumm. Ich hatte mal ein ähnliches Problem. Da hat eine RegExp in PHP super funktioniert und dann in JavaScript auf einmal nicht mehr. Also das war ja so dämlich...

Also ich denke mal, der Fehler liegt irgendwo im PHP-Code, denn sonst würde das ganze nicht im Evaluator funktionieren. Mal schauen...
Was ist das für ein Modifikator am Ende der RegExp? isU? Der ist mir noch nie begegnet. Bist du sicher, dass PHP den unterstützt?
 
Hallo Computer Freak,

danke für deine Antwort.
weil dann hat man wenigstens die Gewissheit, dass sich mal jemand Gedanken drüber gemacht hat.
Ja das dachte ich auch das es keiner liest ;)

Dass man die von PHP nicht in JavaScript kopieren kann ist ja logisch, da die beiden Unterschiedliche Arten von RegEx benutzen.

Das i steht für ignorieren der Groß/Klein - Schreibung.
Wenn s gesetzt ist, werden auch Zeilenumbrüche bei einem Punkt gefunden.
Und das U ist für die Anzahl der treffer.
Nach zu lesen hier

Habs jetzt mal ohne Modifier probiert und bekomm auch keine Ergebnisse zurück.

Grüße

tewes

//Edit:
Kennt jemand eine andere Möglichkeit/RegEx mit dem ich den Tabellennamen rausfinden kann?
 
Zuletzt bearbeitet:
Das funktioniert:
PHP:
preg_match("/^\s*(?:create|insert).*?`(.+)`.*$/is",$query,$hits);
In $hits[1] findest du dann den String, der zwischen dem ersten `-Paar steht.
 
Zuletzt bearbeitet:
Vielen Dank für deine Antwort Gobble-G,

nur jetzt bekomme ich Daten von dem ersten "`" bis zum letzten "`". Wie bekomme ich das hin das ich z.B. nur abo bekomme ?
Array
(
[0] => Array
(
[0] => CREATE TABLE `abo` ( `ID` int(11) unsigned NOT NULL auto_increment, `vorname` varchar(255) default NULL, `nachname` varchar(255) default NULL, `email` varchar(255) default NULL, `firma` varchar(255) default NULL, `code` text, `TIMESTAMP` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `kategorie` int(11) unsigned default NULL, PRIMARY KEY (`ID`), UNIQUE KEY `ID` (`ID`), KEY `ID_2` (`ID`), KEY `email` (`email`), KEY `kategorie` (`kategorie`), KEY `vorname` (`vorname`), KEY `nachname` (`nachname`), KEY `firma` (`firma`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
)

[1] => Array
(
[0] => abo` ( `ID` int(11) unsigned NOT NULL auto_increment, `vorname` varchar(255) default NULL, `nachname` varchar(255) default NULL, `email` varchar(255) default NULL, `firma` varchar(255) default NULL, `code` text, `TIMESTAMP` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `kategorie` int(11) unsigned default NULL, PRIMARY KEY (`ID`), UNIQUE KEY `ID` (`ID`), KEY `ID_2` (`ID`), KEY `email` (`email`), KEY `kategorie` (`kategorie`), KEY `vorname` (`vorname`), KEY `nachname` (`nachname`), KEY `firma` (`firma
)

)

Grüße

tewes
 
Oh, du hast recht. Dadurch, dass der Modifizierer U nicht gesetzt ist, verhalten sich alle Quantifizierer gierig. Durch Hintenanstellen von ? kann man das Verhalten am jeweiligen Quantifizierer umkehren. So sollte es dann gehen ... denke ich mal ... im Prinzip:
PHP:
preg_match("/^\s*(?:create|insert).*?`(.+?)`.*$/is",$query,$hits);
 
Zurück
Oben