einfaches RegEx

einfaches RegEx

am 05.04.2008 22:37:29 von Micha Kuehn

Hallo,

ich vermute, dass mein Wunsch einfach zu erfüllen ist, komme aber nicht
selbst drauf. Ich möchte ein suchmuster erstellen, dass mir $text nur
dann findet, wenn es ein einzelnes Wort ist. soweit, so gut:

$muster = '~\b'.preg_quote($text,'~').'\b~';

Leider ist dies "zu gut", es findet meinen Text auch, wenn er einzeln in
Klammern steht. Genau dieser Fall soll aber ausgeschlossen, also nicht
gefunden werden,
(text) oder auch (mein text) oder (text hier)
soll nicht gematcht werden, ansonsten aber immer der Text, sofern
Wortgrenzen an beiden Seiten sind.

wie geht das am einfachsten?

Danke für das Beseitigen meiner Tomaten vor den Augen
Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: einfaches RegEx

am 06.04.2008 10:41:21 von Heiko Richler

Micha Kuehn wrote:
> $muster = '~\b'.preg_quote($text,'~').'\b~';
>
> Leider ist dies "zu gut", es findet meinen Text auch, wenn er einzeln in
> Klammern steht. Genau dieser Fall soll aber ausgeschlossen, also nicht
> gefunden werden,
> (text) oder auch (mein text) oder (text hier)
> soll nicht gematcht werden, ansonsten aber immer der Text, sofern
> Wortgrenzen an beiden Seiten sind.

In Regulären Ausdrucken gibt es Lookahead (?=!\)) und Lookbehind (? Die ! stehen für nicht:
xx(?=!\)) xx nicht gefolgt von )
(?
Bei Lookadead und Lookbehind werden deren Suchmuster nicht ins Ergebnis
aufgenommen!

$muster = '~(?
Ausprobiert habe ich diesen Code aber nicht.

Heiko
--
http://portal.richler.de/ Namensportal zu Richler
http://www.richler.de/ Heiko Richler: Computer - Know How!
http://www.richler.info/ private Homepage

Re: einfaches RegEx

am 06.04.2008 15:59:42 von Micha Kuehn

Heiko Richler schrieb:
> Bei Lookadead und Lookbehind werden deren Suchmuster nicht ins Ergebnis
> aufgenommen!
>
> $muster = '~(? >
> Ausprobiert habe ich diesen Code aber nicht.
>
> Heiko

Danke, auch für die ausführliche Erklärung. Das war ja doch
komplizierter, als ich dachte. Du hast einen kleinen Fehler eingebaut,
den ich aber nach deinen Erklärungen schnell gefunden habe. richtig muss es

$muster = '~(?
lauten (Klammern vertauschen, vorne Klammer auf, hinten Klammer zu,
hinten ein < weg). Dies nur fürs Archiv, falls es mal jemand anderes
auch braucht.

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