Problem mit Regulären Ausdruck

Problem mit Regulären Ausdruck

am 02.09.2006 00:30:32 von Rainer Hinz

Moin,

sorry, sehe den Wald vor lauter Bäumen nicht:

Habe ein SQL-Query und da möchte ich was raus haben

INSERT INTO tabelle SET col1=3D'xuyd',col2=3DNOW(),col3=3D12 usw.

Nun brauche ich ein regulären Ausdruck, der mit nach übergabe des=20
Spaltennamens alles rausgibt, was vorm hinterm =3D steht bis zum Komma,=20
sofern es eins gibt.

Also: ich gebe an:
col1 und möchte haben col1=3D'xuyd'
col2 und möchte haben col2=3DNOW()
col3 und möchte haben col3=3D12

Mein Test war mit
preg_match("/(col1=3D\'?.+\'?),?/", $sqlquery, $hits)
echo hits[1];

nicht erfolgreich, weil der . Platzhalter natürlich bis ans Ende des=20
Strings geht.

Gibt es sowas wie . außer \' ?

Danke für Hilfe
Gruß
Anni

Re: Problem mit Regulären Ausdruck

am 02.09.2006 00:56:44 von Johannes Vogel

Hi Anni

Anni Schmidt wrote:
> Habe ein SQL-Query und da möchte ich was raus haben
> INSERT INTO tabelle SET col1='xuyd',col2=NOW(),col3=12 usw.
> Nun brauche ich ein regulären Ausdruck, der mit nach übergabe des
> Spaltennamens alles rausgibt, was vorm hinterm = steht bis zum Komma,
> sofern es eins gibt.
> Also: ich gebe an:
> col1 und möchte haben col1='xuyd'
> col2 und möchte haben col2=NOW()
> col3 und möchte haben col3=12
> Mein Test war mit
> preg_match("/(col1=\'?.+\'?),?/", $sqlquery, $hits)
> echo hits[1];
> nicht erfolgreich, weil der . Platzhalter natürlich bis ans Ende des
> Strings geht.

/(col1=.*?)[ ,]/
Problem: Wenn im String drin ein Leerzeichen steht.

> Gibt es sowas wie . außer \' ?

Auch das gäbe es: [^']*

Für dich massgebend ist jedoch .*?, hier das Fragezeichen. Dieses gibt
an, dass nicht die grösstmögliche Menge an Zeichen, sondern die
kleinstmögliche gefunden wird. Näheres findest du im Manual.

HTH, Johannes

Re: Problem mit Regulären Ausdruck

am 02.09.2006 01:05:39 von Niels Braczek

Anni Schmidt schrieb:

> Mein Test war mit
> preg_match("/(col1=3D\'?.+\'?),?/", $sqlquery, $hits)
> echo hits[1];
>=20
> nicht erfolgreich, weil der . Platzhalter natürlich bis ans Ende des =

> Strings geht.

Du suchst nach 'ungreedy', also '.+?' statt '.+'.

Dein Ausdruck berücksichtigt allerdings vieles noch nicht. Er matcht zB=


col1=3D23',

aber nicht

col1=3D'',

Sieh dir das mal an (ungetestet):
$col =3D 'col1';
preg_match( "~(col1=3D(')?(.*?)(? ;

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Problem mit Regulären Ausdruck

am 02.09.2006 08:34:53 von Rainer Hinz

Niels Braczek wrote:

> Du suchst nach 'ungreedy', also '.+?' statt '.+'.

Anders formuliert: Du brauchst... hätte ich den Begriff gewußt, tja, =

dann. RegExp sind doch immer wieder ein Abenteuer

Danke euch beiden...

Gruß
Anni