Seite 1 von 1

Mini Problem mit preg_replace

Verfasst: 15.07.2007, 15:35
von mark007q
Hi zusammen,

ich habe ein (kleines) Problem:

Bsp.:

Code: Alles auswählen

<?
$text="Uwe ist toll und cool";
$text=preg_replace&#40;"'\w* ist toll'", "", $text&#41;;
echo "$text";
?>
Damit passiert genau das was ich will
-> damit wird Uwe ist toll gelöscht und nur "und cool" ausgegeben.

Aber jetzt kommt das Problem:

Code: Alles auswählen

<?
$text="Bären sind toll und cool";
$text=preg_replace&#40;"'\w* sind toll'", "", $text&#41;;
echo "$text";
?>
Bei Umlauten kommt es zu dieser Ausgabe:

"Bä und cool"

Ich will unbedingt auch im ersten Wort vor "sind toll" auch Worte erfassen, die Umlaute enthalten.

Hat jemand eine Idee?

Verfasst:
von

Verfasst: 15.07.2007, 16:01
von Michael1967
Mach doch für die Umlaute davor -

Code: Alles auswählen

$text = str_replace &#40; array &#40; 'ö','ü','ä','Ö','Ü','Ä'&#41;, array &#40; 'oe','ue' ,'ae','Oe','Ue','Ae'&#41;, $text &#41;;

Verfasst: 15.07.2007, 18:48
von Datibesol
Wenn ich dich richtig verstanden habe, dann tut der folgende RegEx das, was du beabsichtigst?

Code: Alles auswählen

<?php
  $text="Bären sind toll und cool";
  $text=preg_replace&#40;"'&#91;a-zA-zöäüÖÄÜß\s&#93;* sind toll'", "", $text&#41;;
  echo "$text";
?>

Verfasst: 15.07.2007, 22:41
von mark007q
Nicht ganz, denn wenn:

$text="Bären sind toll und cool und so weiter Bären sind toll und cool HALLO";

Wenn die Variable z.B. so aussieht, wird nur "HALLO" ausgegeben, es sollte aber "und so weiter HALLO" ausgegeben werden.

Verfasst: 16.07.2007, 06:56
von CIX88
Der Regex ergibt auch keinen Sinn.
Mir ist auch völlig schleierhaft nach was gesucht und ersetzt werden soll.
Dann kannst du gleich dein Pattern mit "^.*? sind toll" setzen.
es sollte aber "und so weiter HALLO" ausgegeben werden
Hmm, wo hollst du denn das her ?

https://www.regex-tester.de/regex.html

Verfasst: 16.07.2007, 12:13
von mark007q
Ok, gesucht werden soll jeweils:

Bären sind toll und cool

ersetzt werden soll es mit "", also nichts.

Text der danach folgt, soll ausgegeben werden. Wenn dann nochmal Bären sind toll und cool folgt, soll aber nicht der vorhergehende Text auch noch mit Nichts ersetzt werden.

Bsp.:

Bären sind toll und cool wobei Tiger ziemlich groß sind aber Bären sind toll und cool dann ist es super.

Das soll rauskommen:

wobei Tiger ziemlich groß sind wenn aber dann ist es super.

Das leistet ja normalerweise das hier:

Code: Alles auswählen

<?
$text="Bären sind toll und cool";
$text=preg_replace&#40;"'\w* sind toll'", "", $text&#41;;
echo "$text";
?>
Ich habe eben bei mir einen Text, der mit "sind toll und cool" immer identsich vorkommt, nur das jeweilige direkte Wort davor variiert. Und das soll eben auch noch mit in die Ersetzung rein.

Das Problem an dem obigen Code ist nur, dass keine Umlaute berücksichtigt werden. Da bliebe dann in diesem Fall noch ein "Bä" übrig.

Verfasst: 16.07.2007, 12:53
von CIX88
Also wenn feste Bestandteile ersetzen werden, reicht auch str_replace().
Ansonsten ergibt \w* keinen Sinn und ist auch nicht Gierig.
Dann müsstest du alles das in dein Pattern setzen, was auch ersetzt werden soll.
Also "Bären sind toll" und mehr nicht => '/Bären sind toll/'
Und dann bleibt "und cool und so weiter und cool HALLO" übrig.
Hoffentlich habe ich das jetzt verstanden :-)

Verfasst: 16.07.2007, 13:03
von mark007q
Nein, "Bären" ist variabel, dort kann auch "Elefant" stehen oder "Tiger" oder oder, daher ist die Lösung mit \w* auch gut, scheitert aber bei Wörtern mit Umlauten. "sind toll und cool" ist nicht variabel.

Verfasst: 16.07.2007, 13:15
von CIX88
Nein die Lösung mit \w* kann nicht gehen, da hier jeglicher Bezugspunkt zum gesuchten fehlt, welhalb du ja auch diese Posting eröffnet hast :-)
\w ist die Kurzform von [A-Za-z0-9_], also alles was damit Zusammenhängt wird dann auch ersetzt.

Verfasst: 16.07.2007, 13:56
von mark007q
CIX88 hat geschrieben:\w ist die Kurzform von [A-Za-z0-9_], also alles was damit Zusammenhängt wird dann auch ersetzt.
Ok, das ist ja dem Grunde nach auch so gewollt - besteht denn die Möglichkeit das noch um alle Umlaute zu erweitern?

Das wäre ja dann quasi die Lösung für mein derzeitiges Problem.

Verfasst: 16.07.2007, 14:20
von CIX88
Jo klar, aber dann würde ich das etwas anders schreiben:
anstelle von \w dann [a-z0-9_öäüÖÄÜß] und Modifer i (Klein- und Großschreibung nicht beachten) mit einsetzen.

Hinweis:
Auch bei Modifer i die Umlaute mit in Großbuchstaben angeben.
Der Modifer i bezieht sich in der Regel auf die Buchstaben von a-z, nicht auf Umlaute (Serverabhängig).