php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.05.2006, 15:29  
Neuer Benutzer
 
Registriert seit: 12.12.2003
Beiträge: 12
GothicFiction
Standard regular Expression verstehen

Hallo liebe PHP.de Gemeinde

bin gerade am herausfinden, was folgende RegEx Pattern wohl macht. Waere schon, wenn ihr mir sagen koennt, ob es stimmt, ich soll naemlich auch dokumentieren.

Code:
  #Pattern                /^@string{([a-z][a-z0-9]*)\s*=\s*\\\"(.*)\\\"\s*}\s*$/i
  #/                      gewaehlter Delimiter /
  #^@string{              Suche @ am Zeilenanfang, gefolgt von string, gefolgt von '{'
  #([a-z]                 Danach muss ein buchstabe kommen
  #[a-z0-9]*)             gefolgt von 0 oder mehr alphanumerische Zeichen
  #\s*=\s*                beliebig viel Whitespace dann = dann wieder beliebig viel Whitespace
  #\\\"(.*)\\\"           beliebiges Zeichen beliebig oft innerhalb von \" \" (weil PHP den Input in "" auskommentiert!)
  #\s*                    gefolgt von beliebig viel Whitespace
  #}                      letztes lesbares Zeichen des Eintrags ist '}'
  #\s*                    gefolgt von beliebig viel Whitespace
  #$                      Ende der Zeichenkette, dass ganze ist ein kompletter Eintrag in einem Bibtex-File
  #/i                     ignoriere Gross- und Kleinschreibung der vorangegangenen RegEx
Ich habe auch noch eine Frage, wieso muss ich {} nicht \{\} schreiben? Dachte {} beschreibt mir einen Quantifier? und was ist string? Wo steht denn, das man das in einer Pattern benutzen kann? Finds einfach nicht...

Damit ihr auch wisst um was es geht: Im Prinzip soll jeweils ein Eintrag aus einem Bibtex File genommen und als unterarray in einem array gespeichert werden, damit man weiter durchsuchen kann. Also z.Bsp:

Code:
@article{Beispiel09
author    =      {GothicFiction},  
title     =      {Regenechsen},
journal   =      {RegEx. Rev. E},
year      =      {1995},
volume    =      {51},
number    =      {6},
pages     =      {15962-15975},
keywords  =      {Regex, regular Expression, questions},
}
wird zu:
Code:
result['article']['Beispiel09']['author']=GothicFiction
result['article']['Beispiel09']['title']=Regenechse
...
zugegriffen wird in dem, was ich hier als Vorlage bekomme habe mit:
Code:
(preg_match("/^@string{([a-z][a-z0-9]*)\s*=\s*\\\"(.*)\\\"\s*}\s*$/i",$line,$matches)>0){
$strings[strtolower($matches[1])]="\"".$matches[2]."\"";
wie immer, falls noch jemand gelungene Vorschlaege fuer ein ganz anderes herangehen hat... immer her damit, bin dankbar dafuer

LG
GothicFiction
GothicFiction ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.05.2006, 15:44  
Neuer Benutzer
 
Registriert seit: 12.12.2003
Beiträge: 12
GothicFiction
Standard

mir scheint, es waere optimal, die Sache mit preg_split anzugehen, aber ich muss ehrlich sagen, ich raff das mit den RegExen noch nicht so ganz. Das waere sicher kein Problem, aber wie ueblich herrscht fuer meinen Scheffe Zeitdruck, waere cool, wenn mir jemand zeigen koennte, wie ich mit meiner RegEx (glaube, dass muesste irgendwie gehen...) ein Bibtex-File, das aus viele Eintraegen wie oben gezeigt aufgebaut ist, in einzelne Bloecke splitte und in ein array packe.
GothicFiction ist offline  
Alt 22.05.2006, 15:58  
Neuer Benutzer
 
Registriert seit: 12.12.2003
Beiträge: 12
GothicFiction
Standard

sodalla.... wisst ihr, ob man in der RegEx eine Bedingung definieren kann, dass er nur matchen soll, wenn nach der abschliessenden } kein @ mehr kommt?
GothicFiction ist offline  
Alt 22.05.2006, 16:31  
Gast
 
Beiträge: n/a
Standard

jo, sowas z.B. (?=MUSTER)

Wo ist denn dein beispiel von ganz oben überhaupt her ?
 
Alt 23.05.2006, 12:18  
Neuer Benutzer
 
Registriert seit: 12.12.2003
Beiträge: 12
GothicFiction
Standard

servus CIX

nunja... ich hab ne neue Arbeitsstelle. Da hat man mir dann einen Ordner Scripte in mein frisch angelegtes Home gelegt und gesagt: "guckmal, die dinger da machen dieses und jenes, manches auch nicht und wir hätten gerne noch das und das!". Als ich die dinger im Editor meiner Wahl öffnete, sah ich im Schnitt 2000 Zeilen Spaghetticode. Das Schlimme ist aber, dass die Scripte funktionieren, was meine Schritt für Schritt auf Template und Klassen Umbauaktion noch nicht macht.

Um überhaupt irgendwie zeitlich am Ball zu bleiben, versuche ich, zumindest Techniken, die benutzt wurden, zu übernehmen, zum Beispiel oben gezeigte RegEx. Die Erläuterungsversuche unten drunter hab ich mir selber drankommentiert um Licht im Dunkeln zu sehen.

Zu deinem (?=Muster): Was genau würde das machen?
GothicFiction ist offline  
Alt 23.05.2006, 12:51  
Erfahrener Benutzer
 
Benutzerbild von Andreas
 
Registriert seit: 22.04.2005
Beiträge: 391
Andreas ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das ist eine schöne Liste, was mit Regexen alles geht.
http://www.regenechsen.de/phpwcms/in...ex_dt_elemente
Andreas ist offline  
Alt 23.05.2006, 13:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

"string" als Bezeichner bei RegExp kenn ich jetzt auch nicht und { } sollte tatsächlich escaped werden.
Trifft der RegExp denn überhaupt auf den Code-Fetzen? (kann es gerade nicht selbst testen)

Würde mich schon sehr wundern..
Zergling-new ist offline  
Alt 23.05.2006, 14:05  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

zum testen :

http://www.cix88.de/projekte/regexp/index.php?OP=GO



Sicher das du da alles richtig raus kopiert hast ?!?!?

Und zeig mal bitte ALLES und nicht nur 'n Teil .. Weil irgendwie ist das nur 'n Teil von irgendwas ...
M3g4Star ist offline  
Alt 23.05.2006, 20:56  
Neuer Benutzer
 
Registriert seit: 12.12.2003
Beiträge: 12
GothicFiction
Standard

Das ist der Original Codeausschnitt:
Code:
//var_dump(microtime());
	$bib=file($BIBFILE);
	$entries=array();
	$strings=array();
	foreach($bib as $key=>$line){
		if(strpos($line,"%")!==false)
			unset($bib[$key]);
		elseif(preg_match("/^@string{([a-z][a-z0-9]*)\s*=\s*\\\"(.*)\\\"\s*}\s*$/i",$line,$matches)>0){
			$strings[strtolower($matches[1])]="\"".$matches[2]."\"";
			unset($bib[$key]);
		}
	}
Das ist ein Auschnitt einer Bibtex datei und ein von mir umgebauter PHP Code mit preg_split:
Code:
<?php 
$file="
@article{sodom,
author    =      {gunnar},  
title     =      {jojo in the ghetto},
journal   =      {ymca},
year      =      {1995},
volume    =      {51},
number    =      {6},
pages     =      {5962-5975},
keywords  =      {alone in the dark, mastery},
}

@article{venom,
author    =      {GF},  
title     =      {Psychoactive Drugs},
journal   =      {Selfaddicted},
year      =      {1995},
volume    =      {51},
number    =      {6},
pages     =      {576-983},
}   

@Article{gomorrah,
author    =  {Pansen},
title     =  {ego fantastico},
journal   =  {hulahoim},
year      =  {1998},
volume    =  {57},
number    =  {3},
pages     =  {2307},
keywords  =  {},
location  =  {},
abstract  =  {},
PACS      =  {araf.bb.34343455.ddef},
}
";

$regex="/^@string{([a-z][a-z0-9]*)\s*=\s*\\\"(.*)\\\"\s*}\s*$/i";

$result=preg_split($regex,$file,PREG_SPLIT_NO_EMPTY);

foreach($result as $key=>$val) {
  echo "Das ist der Schluessel: ".$key." und das ist der Inhalt: ".$val ;
}
 ?>
Und das ist die Ausgabe... warum auch immer es matcht:

Code:
Das ist der Schluessel: 0 und das ist der Inhalt: @article{sodom, author = {gunnar}, title = {jojo in the ghetto}, journal = {ymca}, year = {1995}, volume = {51}, number = {6}, pages = {5962-5975}, keywords = {alone in the dark, mastery}, } @article{venom, author = {GF}, title = {Psychoactive Drugs}, journal = {Selfaddicted}, year = {1995}, volume = {51}, number = {6}, pages = {576-983}, } @Article{gomorrah, author = {Pansen}, title = {ego fantastico}, journal = {hulahoim}, year = {1998}, volume = {57}, number = {3}, pages = {2307}, keywords = {}, location = {}, abstract = {}, PACS = {araf.bb.34343455.ddef}, }
GothicFiction ist offline  
Alt 23.05.2006, 21:25  
Gast
 
Beiträge: n/a
Standard

Hmmm, ist mir völlig neu, dass man { } so einfach missbrauchen kann.
Wenn etwas anders innerhalb von { und } steht, wird es mit als Zeichenkette angesehen
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu Regular Expression Schiedsrichter PHP Tipps 2008 1 19.09.2007 16:41
mvc verstehen lernen... Promaetheus PHP Tipps 2008 32 21.08.2007 12:20
regular expression? Dilandau PHP Tipps 2006 55 30.06.2006 16:10
regexp - ich werde das wohl nie verstehen phpfortgeschrittener PHP Tipps 2006 6 29.01.2006 13:15
Suchen und ersetzen mit Regular Expressions? Datenbanken 0 09.09.2005 15:21
Regular Expression - Alles zwischen Anführungzeichen PHP Tipps 2005-2 3 05.08.2005 14:07
suche eine Hilfe beim Verstehen von PHP Skripten DRINGEND seven-12 Beitragsarchiv 16 13.06.2005 00:16
Regular Expression, Suchen bis zum ersten suppart... PHP-Fortgeschrittene 7 04.05.2005 09:03
komisch problem mit tabelle oder datenbank nix verstehen :) Datenbanken 2 14.03.2005 12:32
Suche gutes PHP-Buch was auch Anfänger verstehen PHP Tipps 2005 2 23.02.2005 10:10
Posix Regular Expression Problem PHP Tipps 2005 9 15.02.2005 15:59
mit regular expressions einen Link umformen?? Wie?? 18inch PHP-Fortgeschrittene 8 19.01.2005 23:45
[Erledigt] Datum mit Regular Expression kontrollieren PHP Tipps 2004-2 7 06.12.2004 09:44
[Erledigt] regular expression: bin zu blöd PHP-Fortgeschrittene 2 08.11.2004 13:12
Nicht Verstehen PHP Tipps 2004 2 07.09.2004 13:32

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php regex zeilenanfang, regex verstehen, regexp zeilenanfang, bibtex regex, php regex verstehen, regularexpressions entziffern, symbol für \beliebig viel\, regexp bis zeilenanfang, php regexp zeilenanfang, bibtex regexp, bibtex regular expression, php regular expression zeilenanfang, regex zeilenanfang php, regex bibtex, regular expression keywords, php regexp title (year), preg_match zeilenanfang, regex & zeilenanfang, regex syntax zeilenanfang php, regular expression title

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:04 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.