Zum Inhalt springen
ThreadPHP & MySQL

Regulärer Ausdruck: Euro Zeichen ersetzen

Kategorie
PHP & MySQL
Gelesen
2740
Antworten
4
Erstellt von: gelöschter BenutzerDatum: 29.05.2012, 08:41 Uhr
Archiv-KommentarArchiviert, nicht priorisiertCMS & technische Umsetzung

Redaktionelle Einordnung

Diese archivierte Diskussion behandelt Regulärer Ausdruck: Euro Zeichen ersetzen aus Sicht der Rubrik PHP & MySQL.

CMS- und Technikfragen sind heute besonders dann relevant, wenn sie Indexierung, Rendering, interne Verlinkung oder Relaunch-Risiken beeinflussen.

Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.

Einige im historischen Thread genannte Tools, Dienste oder externe Links könnten heute nicht mehr verfügbar oder inhaltlich überholt sein. Nutzen Sie sie bitte nur mit zusätzlicher Prüfung.

Startbeitrag

Originaler Foreninhalt in modernisierter Darstellung.

Zur Kategorie
gelöschter Benutzer
Threadstart · PHP & MySQL 2740 mal gelesen · 29.05.2012, 08:41 Uhr

Hi,

ich hänge mal wieder an Regulären Ausdrücken fest...
Ich will Euro als Währung in das Euro Zeichen umwandeln, d.h. erstmal in das Entinity.
Dazu benutze ich preg_replace, und bekomme es z.T. auch hin mit dem Ausdruck:
(€|Euro[^a-z])
Allerding bezieht es den ersten Punkt und das erste Leerzeichen mit ein.
Und am Zeilenende funktioniert es nicht.

String:
"In Europa unbegrenzt, weltweit bis zu fünf Jahre Euro Euro... Euro. Euro . €. € . Euro"

Antworten

4 Beiträge
gelöschter Benutzer
am 29.05.2012, 12:17 Uhr schrieb
Antwort

Chance schrieb:

Hi,

ich hänge mal wieder an Regulären Ausdrücken fest...
Ich will Euro als Währung in das Euro Zeichen umwandeln, d.h. erstmal in das Entinity.
Dazu benutze ich preg_replace, und bekomme es z.T. auch hin mit dem Ausdruck:
(€|Euro[^a-z])
Allerding bezieht es den ersten Punkt und das erste Leerzeichen mit ein.
Und am Zeilenende funktioniert es nicht.

String:
"In Europa unbegrenzt, weltweit bis zu fünf Jahre Euro Euro... Euro. Euro . €. € . Euro"



wie genau ist Dein Ursprungsstring und welches Ergebnis willst Du erreichen?

gelöschter Benutzer
am 01.08.2013, 11:47 Uhr schrieb
Antwort

Eine Lösung ist:

###
$string = "In Europa unbegrenzt, weltweit bis zu fünf Jahre Euro Euro... Euro. Euro . €. € . Euro";

echo preg_replace("/(€|Euro([^a-z]|$))/","€",$string);
###

Das Ergebnis:

---
In Europa unbegrenzt, weltweit bis zu fünf Jahre €€.. € €. €. € . €
---

Das Problem war, dass nach dem "Euro" der Teilausdruck "[^a-z]" folgte, der ja besagt, dass nach dem "Euro" irgendein Zeichen außer die Zeichen a-b (Kleinbuchstaben) folgen müssen ! Deswegen wird bei diesem String das letzte "Euro" nicht ersetzt, weil eben kein weiteres Zeichen folgt, sondern das String-Ende.

Durch "Euro([^a-z]|$)" lässt sich das zwar beheben: Anstatt eines Zeichen nach dem "Euro", darf auch das String-Ende folgen (|$), aber trotzdem gibt es zahlreiche Sonderfälle, die vermutlich nicht zum gewünschten Ergebnis führen.

Wenn wir z.B. folgenden String hätten:

###
$string = "Die Abgasnorm meines Autos lautet Euro4 und ich verkaufe ihn für 5000 euro. Es handelt sich bei diesem Auto um einen EuroP. Import.";
###

würde das Ergebnis:

---
Die Abgasnorm meines Autos lautet € und ich verkaufe ihn für 5000 euro. Es handelt sich bei diesem Auto um einen €. Import.
---

lauten. Problematisch ist vor allem der Ausdruck [^a-z], der ebenfalls alle Zahlen und sogar Großbuchstaben mit einschließt. Vermutlich wollte der Threadersteller damit ein Whitespace oder das Zeilenende darstellen. Außerdem gehe ich mal davon aus, das "euro" (kleingeschrieben) ebenfalls umgewandelt werden sollte.

Deswegen würde ich eher folgenden Ausdruck verwenden, der denke ich alle Fälle berücksichtigt:

echo preg_replace("/(€|Euro\\b)/i","€",$string);

Anstatt "([^a-z]|$)" verwendet man "\\b", also die Wortgrenze, das Punkt, Komma, Leerzeichen und Zeilenende miteinschließt, aber Groß- und Kleinbuchstaben oder Zahlen ignoriert.

Findet jemand ein String, der von diesem regulären Ausdruck nicht richtig ausgewertet wird. Ich meine nein.

gelöschter Benutzer
am 01.08.2013, 18:02 Uhr schrieb
Antwort

Hallo

de.wikipedia.org/wiki/Meuro



Echt schon bewunderswert wie sehr man sich auf dieses einfache Teil stürzt.

Gruß
Jörg
gelöschter Benutzer
am 01.08.2013, 18:25 Uhr schrieb
Antwort

/(€|\\bEuro\\b)/i

?