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!