PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   preg-Regex ist nicht "global"?! (http://www.selfphp.de/forum/showthread.php?t=25083)

Tuxman 09.10.2013 00:45:27

preg-Regex ist nicht "global"?!
 
preg_replace, so will es die Theorie, ist standardmäßig "global".

Nun... ich versuche mich gerade an einem Skript, das in einem WordPress-System (das "..." automatisch durch &8220;...&8221; ersetzt) anständige deutsche Anführungszeichen einfügen soll, ohne die HTML-Tags zu zerschießen.

Das klappt so weit:

PHP-Code:

$originaltext "<em>Frei wie in &8220;freie Rede&8221;, nicht wie in &8220;Freibier&8221;.</em>";

$regex '~(?<!=)&\#8220;(?!>)([^"\r\n]+)&\#8221;(?!>)~x';
$content preg_replace($regex'„$1”'$originaltext); 

Tja. Das erste Ergebnis ersetzt er - das zweite nicht. Und das in JEDEM Beispieltext, den ich finden konnte.

Zitat:

Frei wie in „freie Rede”, nicht wie in “Freibier”.
Ideen?

meikel (†) 09.10.2013 13:06:21

AW: preg-Regex ist nicht "global"?!
 
Das wäre wohl zu einfach?
http://mod.php.developer.vc/str_replace-1/ (Quelltext wird angezeigt)

Tuxman 09.10.2013 14:05:26

AW: preg-Regex ist nicht "global"?!
 
Nein, "zu einfach" trifft es nicht. ;)
Eher zu unflexibel - es sei denn, du hast einen Suchen-String für str_replace parat, der die gewünschte Funktionalität mit allen Sonderfällen abbildet...?

(Ich möchte ähnlich auch für einfache Anführungszeichen vorgehen, und da wird's mit allen 's und 'n ("Ich hab'n Haus, du hast 'n Haus, 's ist ein schönes Haus, 'siehst du das auch so?' fragte er" usw. usf.) schon etwas unübersichtlich - oder übersehe ich gerade etwas ganz Wesentliches? Das wäre natürlich prima!)

Auch dann bliebe meine Frage aber bestehen: Warum ist preg_replace nicht fähig zu mehreren Ersetzungen?

meikel (†) 09.10.2013 14:32:18

AW: preg-Regex ist nicht "global"?!
 
Zitat:

Zitat von Tuxman (Beitrag 145614)
Nein, "zu einfach" trifft es nicht. ;)
Eher zu unflexibel - es sei denn, du hast einen Suchen-String für str_replace parat, der die gewünschte Funktionalität mit allen Sonderfällen abbildet...?

Ich hatte mich nur auf Dein Beispiel bezogen.

Natürlich is das hartes Holz, aus US-ASCII typographisch sauberen Text zu basteln. Obwohl ich mir mit DTP zwischen '90 und '94 meine täglichen Brötchen verdient hatte, sind meine typographischen Kenntnisse eher dürftig.
Zitat:

(Ich möchte ähnlich auch für einfache Anführungszeichen vorgehen, und da wird's mit allen 's und 'n ("Ich hab'n Haus, du hast 'n Haus, 's ist ein schönes Haus, 'siehst du das auch so?' fragte er" usw. usf.) schon etwas unübersichtlich -
Zitat:

oder übersehe ich gerade etwas ganz Wesentliches?
Nein.
Zitat:

Auch dann bliebe meine Frage aber bestehen: Warum ist preg_replace nicht fähig zu mehreren Ersetzungen?
Um PCRE mache ich meist einen großen Bogen, weil ich meine Probleme mit der Pattern-Geheimschrift habe.

Dein Suchstring war allerdings "zu gierig" aka die Option U hatte gefehlt:
http://mod.php.developer.vc/pcre-2/ (Quelltext wird angezeigt)

Tuxman 09.10.2013 15:15:14

AW: preg-Regex ist nicht "global"?!
 
Ah, danke, daran lag's! :) Daran hatte ich gar nicht gedacht. Ärgerlich!


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:52:57 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.