Mailinglisten-Archive |
Hi, erster verdacht: unterschiedliche versionen/implementierungen. - RegexCoach verwendet CL-PPCRE (http://weitz.de/cl-ppcre/) (ist zumindest schonmal in common-lisp..) - PHP preg* verwendet perl-regex (wird wohl die org. perl-C-library verwendet) Um die verwirrung noch zu vergössern: es gibt wohl dutzende implementierungen, mit verscheidene funktonsumfang... http://www.regular-expressions.info/tools.html Sogar innerhalb der "standard linux tools" ( grep, find, bash... - die alle ein bisschen regex können ) feine unterschiede. Auch wird Perl-6 (alles noch beta) die syntax nochmal ändern... Babylon, .klemens Am Dienstag, den 19.01.2010, 09:14 +0100 schrieb Mario Batz: > Hallo, > > folgendes ist gegeben: > - PHP 5.2.0 (preg_match) > - Debian Etch > - Eine Ascii-Datei mit tausenden von Zeilen > > Ich möchte mittels Regulären Ausdrücken prüfen, ob die Datei einen gewissen > Standardaufbau hat. Leider hapert es schon beim ersten zu suchenden Eintrag. > In einer Zeile steht: "BEGIN_PROGRAMM" (Ohne Anführungszeichen). > "BEGIN_PROGRAMM" gibt es in der ganzen Datei nur 1x. > Mit folgendem Pattern möchte ich ab Beginn der Datei bis einschließelich > BEGIN_PROGRAMM die Zeichenkette auslesen: > ~^([\S\s]+BEGIN_PROGRAMM)~ > > Teste ich dieses Pattern im "RegExCoach", dann werden genau die richtigen > Zeilen geliefert. > > Mit PHP-preg_match, findet das Teil garnichts. Wenn ich aber das + als nicht > gierig setze +? funtzt es plötzlich. > > ~^([\S\s]+?BEGIN_PROGRAMM)~ > > Da das Muster allerdings noch viel größer ist, benötige ich später einen > gierigen Ausruck der dann allerdings garnicht mehr funtzt. > > Gleiches gilt auch wenn ich folgendes Pattern schreibe: > ~^(.+BEGIN_PROGRAMM)~s > Mit ~^(.+?BEGIN_PROGRAMM)~s geht es dann plötzlich. > > Steh ich nun aufm Schlauch oder gibt es einen mir noch unbekannten Schalter > in PHP, oder ist es ein Bug? > > > Mit freundlichen Grüßen > Mario Batz > >
php::bar PHP Wiki - Listenarchive