BibTeX Parser

BibTeX Parser

am 17.02.2006 18:12:29 von Tarik Mustafic

Hallo leute,

ich will einen "einfachen" BibTeX-Parser schreiben. Mir sind nicht aber
nicht alle Funktionalitäten von PHP vertraut. Der eintrag könnte
folgendermaßen aussehen:

@article{Gettys90,
author =3D {Jim Gettys and Phil Karlton and Scott McGregor},
title =3D {The {X} Window System, Version 11},
year =3D {1990},
abstract =3D {A technical overview of the X11 functionality. This is
an update
of the X10 TOG paper by Scheifler \& Gettys.}
}

Dieser Eintrag würde in einem Formular eingetragen und soll ausgelesen
werden. Am Anfang will ich zuerst nur jeweils einen eintrag parsen,
also keine mehrfachen BibTeX-Imports gleichzeitig, sondern der
Formulareintrag ist wirklich nur so wie oben angegeben.

Meine MySQL Tabelle hat auch die entsprechenden Felder von BibTeX:
author, title, year abstract,...

Meine Frage ist, wie kann man in PHP zeilenweise so einen eintrag
parsen und in entsprechende Variablen speichern ($author, $title, ...),
die ich dann einfach in meine Tabelle eintrage?

Wie gesagt, bin kein PHP-guru, und weiß eben nicht was mir php bietet
um die sachen so zeilenweise auszulesen, entsprechend zu speichern und
dann in meine datenbank einzutragen. Deswegen bitte ich auch um
entsprechende Auskunft, also für Anfänger :)

Bedanke mich im Voraus

Tarik

Re: BibTeX Parser

am 17.02.2006 18:36:43 von Niels Braczek

Tarik Mustafic schrieb:

> ich will einen "einfachen" BibTeX-Parser schreiben. Mir sind nicht aber
> nicht alle Funktionalitäten von PHP vertraut. Der eintrag könnte
> folgendermaßen aussehen:
>
> @article{Gettys90,
> author = {Jim Gettys and Phil Karlton and Scott McGregor},
> title = {The {X} Window System, Version 11},
> year = {1990},
> abstract = {A technical overview of the X11 functionality. This is
> an update
> of the X10 TOG paper by Scheifler \& Gettys.}
> }
>
> Meine Frage ist, wie kann man in PHP zeilenweise so einen eintrag
> parsen und in entsprechende Variablen speichern ($author, $title, ...),
> die ich dann einfach in meine Tabelle eintrage?

Ich würde hier mit mehrstufigen RegExp arbeiten.
Wenn sichergestellt ist, dass der String *genau* einen Eintrag enthält,
könnte dies funktionieren (nicht getestet):

if (!preg_match('~@article{\s*(\w+)\s*,\s*(.*)\s*}~m',
$string, $match)) {
die('String does not match');
}

$article = $match[1];
$attrib = $match[2];

if (!preg_match('~^(?:(\w+)\s*=\s*{(.*?)}\s*(?:$|,))+~m',
$attrib, $match, PREG_SET_ORDER)) {
die('String does not match');
}

var_dump($match);

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
------------------------------------------------------------ ----