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