Schrift
[thread]8909[/thread]

RegEx: Platzhalter ersetzen klappt nicht (Seite 2)

Leser: 1


<< |< 1 2 3 4 >| >> 33 Einträge, 4 Seiten
bloonix
 2007-04-11 19:19
#75743 #75743
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Ja, das geht, wenn du abfragst, ob dein (Match) auch in %vars
existiert. Aber dann hättest du wiederrum das Problem, dass die Tags
im HTML-Code stehen und nicht entfernt werden. ;)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Lightman
 2007-04-11 19:23
#75744 #75744
User since
2007-01-31
57 Artikel
BenutzerIn
[default_avatar]
Wieso? Er parsed die Datei nach <% ... %> und überprüft, ob der Match ein Schlüssel des Hash ist. Wenn ja, wird <% ... %> ersetzt, wenn nicht, macht er nichts.
bloonix
 2007-04-11 19:35
#75745 #75745
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Jauh, das stimmt. Der Matched ja auf jeden Fall.

Nun, das bekommst du sehr einfach weg...

Code: (dl )
1
2
3
4
5
$row =~ s/<%\s*(\w+)\s*%>/&replace($1)/eg;

sub replace {
  return defined $vars{$_[0]} ? $vars{$_[0]} : '';
}


aber mal ne andere Frage... was machst du eigentlich mit Keys,
die Zeichen besitzen, die nicht mit \w gematched werden?
Als Key kann man ja nehmen was man möchte. :)\n\n

<!--EDIT|opi|1176305757-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
PerlProfi
 2007-04-11 19:38
#75746 #75746
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Dann kann er ja (.+?) in der RegExp verwenden.
Lightman
 2007-04-11 19:47
#75747 #75747
User since
2007-01-31
57 Artikel
BenutzerIn
[default_avatar]
Hmm, das ist auch nicht so ganz, was ich haben will. Im Prinzip soll der Parser nur nach <% ... %> schauen. Wenn bei <% test %> das 'test' im Hash ist, soll <% test %> ersetzt werden. Wenn's nicht im Hash ist, macht er gar nichts.

Ich möchste sowas in der Art, nur eleganter:
Code: (dl )
1
2
3
4
5
6
7
8
9
local $_;

foreach (@array) {
   $_ =~ s/^<%\s*(\w+)\s*%>$//g;

   if ( exists($HASH{$1}) ) {
       # Ersetze
   }
}

(Ich weiß, das klappt nicht. Kann man das nicht in eine RegEx packen?)
PerlProfi
 2007-04-11 19:56
#75748 #75748
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Klar:
Code: (dl )
1
2
3
4
local $_;
foreach (@array) {
$_ =~ s/^<%\s*(\S+?)\s*%>$/$HASH{$1} if exists $HASH{$1}/eg;
}


MfG
Lightman
 2007-04-11 20:01
#75749 #75749
User since
2007-01-31
57 Artikel
BenutzerIn
[default_avatar]
Argh, darauf hätte ich aber auch selber kommen können. *kopfschüttel* Zwar wird jetzt <% test %> durch undef ersetzt, aber damit kann ich leben. Vielen Dank!
PerlProfi
 2007-04-11 20:09
#75750 #75750
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Kannstes ja auch so schreiben: exists $HASH{$1} ? $HASH{$1} : '' dann wirds durch '' ersetzt.
Lightman
 2007-04-11 20:11
#75751 #75751
User since
2007-01-31
57 Artikel
BenutzerIn
[default_avatar]
Mit undef meinte ich ''. ;) Aber ich hab's dank Deiner Hilfe jetzt genau so, wie es soll:
exists $HASH{$1} ? $HASH{$1} : $_

Merci :)\n\n

<!--EDIT|Lightman|1176307934-->
bloonix
 2007-04-11 20:26
#75752 #75752
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Nun, ich dachte an eine Subroutine um gegebenfalls eine Exception
auszulösen, denn wenn ein Key ersetzt werden soll, dieser aber nicht
existiert, dann liegt wohl ein Ereignis vor, auf das man gerne hinge-
wiesen möchte?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 3 4 >| >> 33 Einträge, 4 Seiten



View all threads created 2007-04-07 21:40.