php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 02.08.2009, 11:05  
Neuer Benutzer
 
Registriert seit: 21.02.2009
Beiträge: 28
hawkeye78 befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] regulärer Ausdruck für Bibtex Datei

Hallo,

ich bin mir nicht wirklich sicher ob ich besser hier oder besser im Anfängerbereich mit meiner Frage aufgehoben bin da es eigentlich nur eine kleinigkeit ist, die ich aber leider nicht hinbekomme. Also falls diese Frage besser im anderen Bereich aufgehoben ist möchte ich gerne einen Administrator / Moderator dazu einladen den Beitrag zu verschieben.
Nun aber zu meiner Frage ich habe zur Aufgabe bekomme eine Bibtex Datei zu parsen, dabei handelt es sich um eine Textdatei welche wissenschaftliche Veröffentlichungen enthält. Ein Eintrag in einer solchen Datei hat dabei folgenden Aufbau
Code:
@article{test123,
	author = {Fritz Mustermann},
	title = {Über das Liebesliebe der Pflastersteine},
	year = {2009},
	journal = {Schöner Wohnen},
}
Da der Inhalt ein solchen Datei nicht nur aus articles sondern auch aus books und noch einigen anderen Arten bestehen kann. Ich mir nun überlegt mittels eines regulären Ausdrucks alle "Datensätze" heraus zu suchen die mit @article... beginnen und dabei nur die von mir benötigten Informationen d.h. alles zwischen den beiden äußersten Klammern in ein Array zu füllen. Allerdings stehe ich nun vor der Problem das mein Regulärer Ausdruck auch das "@article" mit in die Variable schreibt und dazu noch bei zwei oder Mehr Datensätzen jeweils mehrere leere Arrayeinträge dazwischen hat was die spätere verarbeitung natürlich etwas erschwert.
Mein regulärer Ausdruck schaut im moment so aus
Code:
(\@article\{\w*,\s(?<info>\s*\w*\s*=\s*\{.*\}[,\s]+)*)*
Ich weiß das man reguläre Ausdrücke nicht mit einem schnellen Blick berichtigen kann (ich kann es zumindestens nicht), trotzdem wäre ich sehr dankbar wenn mal jemand drüber schauen könnte und mir sagen könnte wo mein Fehler liegt.
Viele Grüsse
Dan
hawkeye78 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.08.2009, 11:20  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Moin,

ich würde sagen, die äußeren runden Klammern sind dort fehl am Platz!

Daher mein Vorschlag:

Code:
\@article\{\w*,\s(?<info>\s*\w*\s*=\s*\{.*\}[,\s]+)*
Edit:

Hab gerade nochmal geschaut. Er selektiert ja nur die letzte Zeile (journal) Ich würde den Ausdruck wohl in zwei aufteilen (aber nur, weil ich nicht genau weiß, wie und ob man das in einem Rutsch erledigen kann)

Zuerst in etwa so:

Code:
/\@article\{([^\@]*)\}/
Dann brauchst du noch einen Ausdruck, um die einzelnen Attribute auseinander zu nehmen!

Gruß

Geändert von Asipak (02.08.2009 um 11:54 Uhr).
Asipak ist offline   Mit Zitat antworten
Alt 02.08.2009, 11:38  
Neuer Benutzer
 
Registriert seit: 21.02.2009
Beiträge: 28
hawkeye78 befindet sich auf einem aufstrebenden Ast
Standard

Hallo Asipak,

vielen Dank für deine schnelle hilfe ich habe mich vor meinem geistigen Auge schon wieder den ganz Tag vor diesem Problem hängen sehen. Ich danke dir das Du mir das erspart hast. Aber ich lasse mir ja gerne nachsagen das ich reguläre Ausdrücke nicht verstanden habe, aber warum sind die Klammern übrig? Ich meine der Ausdruck mit @article{...} wiederholt sich doch mehrmals in der Datei?
Viele Grüsse
Dan
hawkeye78 ist offline   Mit Zitat antworten
Alt 02.08.2009, 11:43  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Hi,

der Ausdruck durchsucht ja den gesamten String, in deinem Fall die gesamte Datei. Dabei sucht er nach bestimmten Konstrukten. Wenn diese dem Ausdruck entsprechen, entspricht das einem Treffer. Danach wird die Suche sozusagen vorgesetzt, von vorne nach hinten. Wenn wieder ein entsprechendes Konstrukt gefunden wurde, wird das eben wieder "eingesammelt".

Die runden Klammern sorgen dafür, dass das was zwischen ihnen steht, mit in das Ergebnis einfließt (Gruppierung).

Ich weiß nicht genau, welche Informationen für dich von Belang sind. Hast du dir schonmal das Ergebnisarray angesehen? Was sagst du zu meinem "EDIT" ?

Zitat:
Ich mir nun überlegt mittels eines regulären Ausdrucks alle "Datensätze" heraus zu suchen die mit @article... beginnen und dabei nur die von mir benötigten Informationen d.h. alles zwischen den beiden äußersten Klammern in ein Array zu füllen.
Code:
/\@article\{([^\@]*)\}/
Ergebnis:

Code:
Array
(
    [0] => Array
        (
            [0] => @article{test123,
author = {Fritz Mustermann},
title = {Über das Liebesliebe der Pflastersteine},
year = {2009},
journal = {Schöner Wohnen},
}
        )

    [1] => Array
        (
            [0] => test123,
author = {Fritz Mustermann},
title = {Über das Liebesliebe der Pflastersteine},
year = {2009},
journal = {Schöner Wohnen},

        )

)

Geändert von Asipak (02.08.2009 um 11:54 Uhr).
Asipak ist offline   Mit Zitat antworten
Alt 02.08.2009, 11:59  
Neuer Benutzer
 
Registriert seit: 21.02.2009
Beiträge: 28
hawkeye78 befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

vielen Dank für die Erklärung, dann ist jetzt wirklich alles klar. Ich bräuchte eigentlich nur die Informationen die zwischen den äußersten Klammern stehen sprich

Code:
test123,
author = {Fritz Mustermann},
title = {Über das Liebesliebe der Pflastersteine},
year = {2009},
journal = {Schöner Wohnen},
Aber die bekomme ich ja jetzt einfach indem ich auf das Ergebnis ein Explode anhand von "}," mache und damit alles in seperaten Feldern habe was ich dann ja einfach weiter zerlegen kann usw.
Noch einmal vielen Dank für deine Hilfe und einen schönen Sontag.
Viele Grüsse
Dan
hawkeye78 ist offline   Mit Zitat antworten
Alt 02.08.2009, 17:53  
Erfahrener Benutzer
 
Benutzerbild von Mati_
 
Registriert seit: 27.06.2009
Beiträge: 107
PHP-Kenntnisse:
Fortgeschritten
Mati_ befindet sich auf einem aufstrebenden Ast
Mati_ eine Nachricht über ICQ schicken Mati_ eine Nachricht über MSN schicken
Standard

Liegen die Attribute (author, title, year, journal) immer in der gleichen Reihenfolge vor? Wenn nein, sind es zumindenst immer vier Stück? Wenn ja, lässt sich das auch leicht mit einem Ruck erledigen.
Mati_ ist offline   Mit Zitat antworten
Alt 02.08.2009, 21:11  
Neuer Benutzer
 
Registriert seit: 21.02.2009
Beiträge: 28
hawkeye78 befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

nein leider liegen weder die Attribute immer in der gleichen Reihenfolge noch sind es immer die gleichen d.h. es können auch mehr oder weniger sein.
Viele Grüsse
Dan
hawkeye78 ist offline   Mit Zitat antworten
Alt 03.08.2009, 07:54  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Vor ein paar Monaten habe ich auch mal sowas versucht. Habe das Projekt angehangen, vielleicht kannst du damit was anfangen. Ich hasse es, wenn Quellcode ungenutzt bleibt.
Angehängte Dateien
Dateityp: zip bibtex.zip (8,3 KB, 22x aufgerufen)
mermshaus ist offline   Mit Zitat antworten
Alt 03.08.2009, 15:59  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Eine variable Anzahl von Elementen einzeln und gleichzeitig gemeinsam mit einem Gruppenelement zu matchen, ist in einem Ausdruck nicht möglich.
Du könntest aber viell. linear parsen und die Struktur später bauen:

(nicht vollständig, nur als Ansatz)
Code:
(?:@article\{(.*))|(?:(.*)\s*=\s*\{(.*)\})
Anschliessend mit Gruppenbruch auswerten.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (03.08.2009 um 16:03 Uhr).
nikosch ist offline   Mit Zitat antworten
Antwort


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
[Erledigt] Regulärer Ausdruck tito PHP Tipps 2009 9 29.07.2009 15:18
[Erledigt] Regulärer Ausdruck - preg_match Felk PHP Tipps 2009 9 24.04.2009 22:09
Wert in externer Datei speichern Abakay PHP Tipps 2008 6 04.12.2008 18:56
[Erledigt] Regulärer Ausdruck mit spezieller Negation? Anotherone PHP Tipps 2008 3 08.10.2008 11:02
[Erledigt] Regulärer Ausdruck: Wörter in beliebiger Reihenfolge genau einmal finden stoffel PHP Tipps 2008 8 01.10.2008 20:32
regulärer Ausdruck dobberph PHP-Fortgeschrittene 6 05.08.2008 09:54
Regulärer Ausdruck ruferp PHP Tipps 2007 1 19.06.2007 20:21
Regulärer Ausdruck für Preis (float) Ticos PHP Tipps 2007 13 06.03.2007 20:21
regulärer ausdruck md5hash PHP Tipps 2005-2 14 24.07.2005 14:55
[Erledigt] Regulärer Ausdruck HILFE!! PHP-Fortgeschrittene 6 22.07.2005 16:39
Regulärer Ausdruck mit Negation? PHP-Fortgeschrittene 23 21.07.2005 09:01
Regulärer Ausdruck PHP Tipps 2005 12 19.05.2005 19:43
str_replace/ereg_replace regulärer ausdruck gesucht[gelöst] nautiluS PHP Tipps 2005 12 10.05.2005 13:50
regulärer Ausdruck msdose PHP Tipps 2005 16 01.05.2005 23:31
[Erledigt] Regulärer Ausdruck zum Testen auf Bildadresse PHP-Fortgeschrittene 9 05.02.2005 16:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
bibtex php, php bibtex, php bibtex parser, bibtex datei, bibtex datei parsen, bibtex ausdruck, bibtex parser php, reguläre ausdrücke bibtex editor, php parse bibtex, php parsen bibtex author title, php bibtex parsing, php regulärem ausdruck, bibtext einen ausdruck ersetzen, besserer ausdruck fuer alles klar, reguläre ausdrücke nicht auswerten was zwischen 2 elementen, php parse bibtex file, reguläre ausdrücke php reihenfolge, bibtex einsteiger, in einem string von hinten nach einem bestimmten ausdruck suchen php, reguläre ausdrücke \oder\ \beliebiger reihenfolge\

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:46 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