regulärer ausdruck
flobee
- php
0 André Laugks0 André Laugks1 flobee0 flobee0 André Laugks0 flobee
Hallo
Ich versuche gerade eine php Datei zu lesen und den Inhalt editierbar zu machen und stelle gerade fest das ich mit String Funktionen ggf. nicht weiter komme.
Ich bin mit regulären Ausdrücken alledings nicht sicher und bin mir nicht klar ob ich hiermit auch weiter komme.
inhalt der datei:
define('KEY','VALUE'); // notes
...
Werte die ich brauche:
den "key" und "value" ggf "notes" wenn welche da sind.
Sowie ART der QUOTES in key und value!! ganz wichtig! (die bekommt man alleding mit strpos() und/oder substr() recht unkompliziert herraus.
und die variablen die mich mit den stringfunktionen zum verzweifeln bringen: leerzeichen zw. den elementen zB.:
define( 'KEY' , "durch den parser \n VALUE" ) ; // notes
define('KEY', 'VALUE' ); // notes
...
dennoch sehe ich die regelmässigkeit: komma und klammer sind immer da so das ich mit preg_match_all eigentlich alles bekommen können müsste was ich benötige oder?
habe nur keinen plan wie ich den ausdruck schreibe bzw brauch hier hilfe.
mein ersterversuch:
/(^define()((?<=')|(?<="))+([a-zA-Z0-9_])+(?<=,)+((?<=")|(?<='))+([a-zA-Z0-9_])+/i
Gruß Florian
--
Hallo!
define('KEY','VALUE'); // notes
define( 'KEY' , "durch den parser \n VALUE" ) ; // notes
define('KEY', 'VALUE' ); // notes
Hiermit
([\s]*'"['"][\s]*,[\s]*'"['"][\s]*)[\s]*;[\s]*[/]*[\s]*(.*)
konnte ich KEY, VALUE und notes einfangen.
1 => KEY
2 => VALUES
3 => notes
Ich glaube der ist aber was besser, weil hier keine Leerzeichen hinter nodes mit eingefangen werden:
([\s]*'"['"][\s]*,[\s]*'"['"][\s]*)[\s]*;[\s]*[/]*[\s]*([\w]+)
Aber höchstwahrscheinlich könnte man meine Ausdrücke noch kürzer schreiben.
MfG, André Laugks
Aber höchstwahrscheinlich könnte man meine Ausdrücke noch kürzer schreiben.
Aber generel solltest Du alle Ergebnisse noch mal durch tim(); hagen. Weil auch bei KEY und VALUE Leerzeichen (rechts und links) mitgenommen werden.
MfG, André Laugks
/([\s]*'"['"][\s]*,[\s]*'"['"][\s]*)[\s]*;[\s]*[/]*[\s]*(.*))/
/([\s]*'"['"][\s]*,[\s]*'"['"][\s]*)[\s]*;[\s]*[/]*[\s]*([\w]+))/
wow, wat für ne maskiererei :-)
schon mal vielen dank! (fehlte je ne klammer am ende)
mich wundert das (?<='|") etwas anderes ist als ["'] (hat man mir mal gesagt das man das aus performance gründen mögl. nicht machen soll(!?)
und (.*) ist die bedeutung für "nimm alles"?
die letzte klammer muss als optional: (([\w])?) bzw (\W?) , richtig!?
MfG, André Laugks
lieben Gruß Florian
die letzte klammer muss als optional: (([\w])?) bzw (\W?) , richtig!?
so vielleicht:
define ('KEY', "VALUE \n'"); // dghdfg /* */
/([\s]*'"['"][\s]*,[\s]*'"['"][\s]*)[\s]*;[\s]*(//)*(.*))/
mit $matches=preg_split( $needle, $string, -1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY)
[0] => define (
[1] => 'KEY' , "VALUE \n'"); // dghdfg /* */
[2] => KEY
[3] => VALUE \n'
[4] => //
[5] => dghdfg /* */
lieben Gruß Florian
Hallo!
wow, wat für ne maskiererei :-)
Naja, wie gesagt vielleicht könnte man das kürzer schreiben.
(fehlte je ne klammer am ende)
Eigentlich nicht! Klammern halten Gruppierungen von Submustern fest, mit denen Du über darauf $1, $2,...,$n und \1, \2,...,\n zugreifen kannst.
preg_match("MEIN_REGULÄRER_AUSDRUCK", "DER_STRING", $match);
$match[1]; // KEY
$match[2]; // VALUE
$match[3]; // nodes
mich wundert das (?<='|") etwas anderes ist als ["'] (hat man mir mal gesagt das man das aus performance gründen mögl. nicht machen soll(!?)
Mhhhh, kann ich Dir nicht wirklich beantworten. Da Du nur ein paar lumpige Textdateien hast, wirst Du den Performance-Unterschied fast gar nicht oder gar nicht messen können. Sicherlich kommt das bei einer Datei mit einer Größe von mehreren MB zum tragen. Aber da fehlt mir die Erfahrung.
und (.*) ist die bedeutung für "nimm alles"?
Ja
die letzte klammer muss als optional: (([\w])?) bzw (\W?) , richtig!?
siehe oben
Ich habe ein sehr gutes Tool gefunden, mit dem ich meine regulären Ausdrücke baue.
Regex Coach: http://www.weitz.de/regex-coach/
Beispiel
http://www.pb82.de/_extern/selfforum/2005_02_09/regexcoach.gif
MfG, André Laugks
Hallo!
, mit dem ich meine regulären Ausdrücke baue.
Regex Coach: http://www.weitz.de/regex-coach/
Beispiel
http://www.pb82.de/_extern/selfforum/2005_02_09/regexcoach.gif
Ja den habe ich, aber da komme ich nicht wirklich drauf klar :-?
vielleicht fehlt mir auch nur die erklärung wie ich etwas zu deuten habe. mein bookmark liste ist lang zu "regex" die dokus noch viel länger :-)
MfG, André Laugks
Gruß Florian
Hallo!
Ja den habe ich, aber da komme ich nicht wirklich drauf klar :-?
vielleicht fehlt mir auch nur die erklärung wie ich etwas zu deuten habe. mein bookmark liste ist lang zu "regex" die dokus noch viel länger :-)
Das ist gar nicht schwer. Dazu hättest Du Dir vielleicht einfach nur mal das Bildchen auf der Webseite (http://www.weitz.de/regex-coach/) anschauen sollen.
Alles was man mit den regulären Ausdruck erkennt wird gelb hinterlegt. Gruppierungen von Submustern kann man über die "Selections-IDs" ansteuern und die werden dann orange hinterlegt.
MfG, André Laugks