Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Mini Problem mit preg_replace

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 15.07.2007, 15:35

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?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Michael1967
PostRank 9
PostRank 9
Beiträge: 2158
Registriert: 26.10.2005, 23:51

Beitrag von Michael1967 » 15.07.2007, 16:01

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;;

Datibesol
PostRank 3
PostRank 3
Beiträge: 96
Registriert: 22.01.2007, 00:03
Wohnort: Köln

Beitrag von Datibesol » 15.07.2007, 18:48

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";
?>

mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 15.07.2007, 22:41

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.

CIX88
PostRank 3
PostRank 3
Beiträge: 90
Registriert: 11.05.2007, 11:45

Beitrag von CIX88 » 16.07.2007, 06:56

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

mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 16.07.2007, 12:13

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.

CIX88
PostRank 3
PostRank 3
Beiträge: 90
Registriert: 11.05.2007, 11:45

Beitrag von CIX88 » 16.07.2007, 12:53

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 :-)

mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 16.07.2007, 13:03

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.

CIX88
PostRank 3
PostRank 3
Beiträge: 90
Registriert: 11.05.2007, 11:45

Beitrag von CIX88 » 16.07.2007, 13:15

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.

mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 16.07.2007, 13:56

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.

CIX88
PostRank 3
PostRank 3
Beiträge: 90
Registriert: 11.05.2007, 11:45

Beitrag von CIX88 » 16.07.2007, 14:20

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).

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag