Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Frage zu Regulären Perl-Ausdrücken (https://www.delphipraxis.net/60971-frage-zu-regulaeren-perl-ausdruecken.html)

faux 15. Jan 2006 10:40


Frage zu Regulären Perl-Ausdrücken
 
Hallo!

Ich hab mal eine kurze Frage zu den Regulären Perl-Ausdrücken:

Ich will folgenden String in PHP ersetzen:
Code:
[amazon="Das ist der Text"]123456789[/amazon]
Ich hätte das so gemacht:

Code:
$text = preg_replace("#\[amazon=\\\"(.*?)\\\"\](.*?)\[/amazon\]#si", "[amazon:$uid=\\\"\\1\\\"]\\2[/amazon:$uid]", $text);

Auch so hab ichs schon Probiert:
$text = preg_replace("#\[amazon=(\\\".*?\\\")\](.*?)\[/amazon\]#si", "[amazon:$uid=\\1]\\2[/amazon:$uid]", $text);
Geht leider beides nicht. Wieso denn nicht?!

Grüße
Faux

S2B 15. Jan 2006 10:56

Re: Frage zu Regulären Perl-Ausdrücken
 
Also bei mir läuft dein Code:
Code:
<?php

$text = '[amazon="Das ist der Text"]123456789[/amazon]';
echo $text . '

';

$uid = '56483';
$text = preg_replace("#\[amazon=\\\"(.*?)\\\"\](.*?)\[/amazon\]#si", "[amazon:$uid=\\\"\\1\\\"]\\2[/amazon:$uid]", $text);
echo $text;

?>
Die Ausgabe
[amazon="Das ist der Text"]123456789[/amazon]

[amazon:56483=\"Das ist der Text\"]123456789[/amazon:56483]


Ich würde dir aber empfehlen, für reguläre Ausdrücke nicht Doublequotes, sondern Hochkommas zu verwenden, da dann der reguläre Ausdruck besser lesbar wird (ich hasse Escapes :wink:).

jfheins 15. Jan 2006 11:01

Re: Frage zu Regulären Perl-Ausdrücken
 
Also so in etwa:
Code:
$regex = '/\[amazon="(.*)"\](.*)\[\/amazon\]/si';

$uid = 'deineuid';

$repl = '[amazon:' . $uid . '="\\1"]\\2[/amazon:' . $uid . ']';

echo preg_replace($regex, $repl, 'hfbcdbvsdbv [amazon="Das ist der Text"]123456789[/amazon] sdkivnbfb');
Mit einfachen Hochkommata: sieht 1. viel besser aus, ist 2. besser lesbar und 3. sogar kürzer ;)

Gibt dann
Code:
hfbcdbvsdbv [amazon="Das ist der Text"]123456789[/amazon] sdkivnbfb


hfbcdbvsdbv [amazon:deineuid="Das ist der Text"]123456789[/amazon:deineuid] sdkivnbfb
Oder wolltest du die \" bei
Zitat:

=\"Das ist der Text\"]123456789
?

faux 15. Jan 2006 11:19

Re: Frage zu Regulären Perl-Ausdrücken
 
Danke für die Antworten.

Es lag nicht am Ausdruck. :mrgreen:
Es lag daran, dass man \\\\\\" anstatt von \\\\\" schreiben hätte müssen, da phpBB das Tag [amazon="Text"] bevor es zu der entsprechenden Stelle kam, bereits backgequotet hat: [amazon=\"Text\"] :roll:

Danke für die Hilfe.

Zitat:

Zitat von jfheins
Mit einfachen Hochkommata: sieht 1. viel besser aus, ist 2. besser lesbar und 3. sogar kürzer ;)

Mache ich normalerweise, aber ich hab den Code in eine bestehende phpBB-Datei eingefügt, in der bereits mehrere solche Zeilen sind. Und da dachte ich mir, ich mache es auch Doublequoted, da es dann einheitlich ist, und man beim lesen nicht umdenken muss. ;)

Grüße
Faux


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz