Hilfe bei regulärem Ausdruck

Hilfe bei regulärem Ausdruck

am 30.06.2006 13:12:19 von Micha Kuehn

Hallo,
ich möchte in einem String nach dem Inhalt der Variable $text suchen,
aber davor und danach darf kein Buchstabe stehen. Mein Versuch:

$muster = "[^a-zA-ZäöüÄÖÜß]".$text."[^a-zA-ZäöüÄÖÜß]";
$gefunden = ereg($muster,$suchtext);

Das Problem: Wenn der $text am Anfang [oder Ende] des Suchstrings steht,
wird er bisher auch nicht gefunden, obwohl ja kein Buchstabe davor
[dahinter] steht.

Wie sage ich jetzt "kein Buchstabe" oder "gar nichts"?

Danke,
Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: Hilfe bei regulärem Ausdruck

am 30.06.2006 13:18:57 von Norbert Melzer

Micha Kuehn schrieb:
> Hallo,
> ich möchte in einem String nach dem Inhalt der Variable $text suchen,=
=20
> aber davor und danach darf kein Buchstabe stehen. Mein Versuch:
>=20
> $muster =3D "[^a-zA-ZäöüÄÖÜß]".$text."[^a-zA-ZäöüÄ =
ÖÜß]";
> $gefunden =3D ereg($muster,$suchtext);

Erst einmal suchst Du:

8.2. Soll ich ereg() oder preg() verwenden?
http://www.php-faq.de/q/q-regexp-ereg.html

> Das Problem: Wenn der $text am Anfang [oder Ende] des Suchstrings steht=
,=20
> wird er bisher auch nicht gefunden, obwohl ja kein Buchstabe davor=20
> [dahinter] steht.

Und dann hilft Dir sehr warscheinlich der Stern (*) weiter er bedeutet 0
bis unendlich viele Zeichen, oder Plus (+) für 1 bis unendlich viele,
oder das Fragezeichen (?) welches für 0 bis 1 Zeichen steht. Weiterhin
gibt es die möglichkeit eine Anzahl in geschweiften Klammern anzugeben,=

zB {2,5} was für 2 bis 5 Zeichen steht.

Dies wird jeweils hinter die entsprechenden Zeichen(klassen) geschrieben.=


Ausserden

$muster =3D "[^a-zA-ZäöüÄÖÜß]$text[^a-zA-ZäöüÄÖ= DC=
ß]";

funktioniert, nur sollte es nachher für preg angepasst werden in

$muster =3D "~[^a-zA-ZäöüÄÖÜß]$text[^a-zA-ZäöüÄÖ Ü=
ß]~"; // oä

Ausserdem

$muster =3D "~[\s\d]$text[\s\d]~"

sagt so ziemlich das gleiche aus wenn ich mich gerade nicht vertue.

> Danke,
> Micha

Bitte
Norbert

Re: Hilfe bei regulärem Ausdruck

am 30.06.2006 13:36:48 von Micha Kuehn

Norbert Melzer schrieb:
> $muster = "~[\s\d]$text[\s\d]~"
>
> sagt so ziemlich das gleiche aus wenn ich mich gerade nicht vertue.

Was ist mit Satzzeichen, z.B. dem Doppelpunkt nach dem $text? [\s\d]
heißt doch (wenn ich richtig verstanden habe): Ziffer oder Whitespace um
$text herum.
Schließt \d auch ein "da steht gar nichts" ein?

Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: Hilfe bei regulärem Ausdruck

am 30.06.2006 13:44:50 von Micha Kuehn

Ich hab's jetzt wohl hinbekommen mit

$muster = "~([^a-zA-ZäöüÄÖÜß]|\A)".$text."([^a-zA-ZäöüÄÖÜß]|\Z)~";

und preg_match

Danke für die Hilfestellung,
Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: Hilfe bei regulärem Ausdruck

am 30.06.2006 14:33:19 von Carsten Wiedmann

Micha Kuehn schrieb:

> ich möchte in einem String nach dem Inhalt der Variable $text suchen, aber
> davor und danach darf kein Buchstabe stehen. Mein Versuch:
>
> $muster = "[^a-zA-ZäöüÄÖÜß]".$text."[^a-zA-ZäöüÄÖÜß]";
> $gefunden = ereg($muster,$suchtext);

Würe es das nicht auch tun?:
| $muster = "|\b{$text}\b|";
| $gefunden = preg_match($muster, $suchtext);

Gruß
Carsten

Re: Hilfe bei regulärem Ausdruck

am 30.06.2006 15:05:36 von Niels Braczek

Carsten Wiedmann schrieb:

> Würe es das nicht auch tun?:
> | $muster =3D "|\b{$text}\b|";
> | $gefunden =3D preg_match($muster, $suchtext);

Ja, aber...

1. Da über die Struktur des Inhaltes von $text nichts bekannt ist, muss=

davon ausgegangen werden, dass die Variable RegExp-Sonderzeichen
enthalten kann. Daher ist vielleicht eine Maskierung sinnvoll.
$muster =3D '~\b'.preg_quote($keywords, '~').'\b~';

2. '|' ist ein schlechter Begrenzer, weil dieses Zeichen zu den
RegExp-Sonderzeichen gehört (siehe
http://de2.php.net/manual/en/function.preg-quote.php).

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: Hilfe bei regulärem Ausdruck

am 01.07.2006 15:51:40 von Micha Kuehn

Niels Braczek schrieb:
> $muster = '~\b'.preg_quote($keywords, '~').'\b~';

Danke, so habe ich es jetzt übernommen. Zwar sollten die gesuchten Text
nur einfache Buchstabenkombinationen sein, aber ein preg_quote zuviel
schadet denn ja auch nicht unbedingt. Sicher ist sicher.

Bei SelfPHP steht, dass \b für Wortbegrenzer (Whitespace) steht. Was ist
denn alles Whitespace? Ich dachte bisher: Leerzeichen, Tab,
Zeilenumbruch. Sind denn auch Satzzeichen whitespace - oder ist da nur
SelfPHP mal wieder falsch?

Danke für eure Hilfe!

Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: Hilfe bei regulärem Ausdruck

am 01.07.2006 16:01:57 von Niels Braczek

Micha Kuehn schrieb:
> Niels Braczek schrieb:

>> $muster =3D '~\b'.preg_quote($keywords, '~').'\b~';

> Bei SelfPHP steht, dass \b für Wortbegrenzer (Whitespace) steht. Was =
ist=20
> denn alles Whitespace? Ich dachte bisher: Leerzeichen, Tab,=20
> Zeilenumbruch. Sind denn auch Satzzeichen whitespace - oder ist da nur =

> SelfPHP mal wieder falsch?

Whitespace ist alles, was beim Drucken keine Farbe aufs Papier bringt.
\b berücksichtigt darüber hinaus weitere Zeichen.

http://de.php.net/manual/en/reference.pcre.pattern.syntax.ph p

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: Hilfe bei regulärem Ausdruck

am 03.07.2006 12:47:44 von Frank Schenk

Micha Kuehn wrote:
> Niels Braczek schrieb:
>
>> $muster = '~\b'.preg_quote($keywords, '~').'\b~';
>
>
> Danke, so habe ich es jetzt übernommen. Zwar sollten die gesuchten Text
> nur einfache Buchstabenkombinationen sein, aber ein preg_quote zuviel
> schadet denn ja auch nicht unbedingt. Sicher ist sicher.
>
> Bei SelfPHP steht, dass \b für Wortbegrenzer (Whitespace) steht. Was ist
> denn alles Whitespace? Ich dachte bisher: Leerzeichen, Tab,
> Zeilenumbruch. Sind denn auch Satzzeichen whitespace - oder ist da nur
> SelfPHP mal wieder falsch?

SelfPHP ist Veraltet, es gibt eine offizielle Doku:

http://www.php.net

Und bitte die englische Doku benutzen, die ist Tagesaktuell.


gruß, Frank