Schrift
[thread]6808[/thread]

Inhalt zwischen 2 Ausdrücken entfernen (Seite 2)



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Dubu
 2005-03-23 10:32
#52854 #52854
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Strat,23.03.2005, 09:06](ich gedenke mein Perl-Mannbarkeitsritual nicht dadurch abzulegen, dass ich ein mehr oder weniger funktionierendes Mailversendemodul und ein HTML-Templating-System entwickle ;) )[/quote]
strat, das ist signaturreif.
esskar
 2005-03-23 10:50
#52855 #52855
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=stb2050,22.03.2005, 13:34]Funktioniert optimal.[/quote]
so... ich beruf mich darauf... :)
Taulmarill
 2005-03-23 11:34
#52856 #52856
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
pkai: deine verwendung von \1 frisst einfach nur performance, da das pattern ja immer den selben string matcht. andererseits kann man mit so was evtl. die kollegen verwirren :)
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Dubu
 2005-03-23 12:20
#52857 #52857
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=pKai,22.03.2005, 19:23]bei
Code: (dl )
$var =~ s!($pattern).*\1!!;
hat das verbliebene Klammerpaar ja sogar einen Sinn.
An Meinungen zu diesem Konstrukt (vs. $pattern x 2 im RE) wäre ich interessiert.
[/quote]
Wenn es sich bei $pattern um einen festen String handelt, dann ist es schneller, wenn man zweimal $pattern in der Regex nutzt. (Laut einem kurzen Test ca. um den Faktor 2 schneller.)

Wenn $pattern dagegen variable Anteile enthaelt (Wildcards, Zeichenmengen etc.), dann haben beide Varianten verschiedene Bedeutung und sind deshalb nicht vergleichbar. Die Backreferenz \1 enthaelt ja  genau den String, der innerhalb der ersten Klammern gematcht hat, und nicht das Pattern, was dort steht.

Ein Beispie: Wenn $pattern = '[a-z]' ist, dann passt /^$pattern.*$pattern$/ auf jede Zeichenkette, die mit einem Kleinbuchstaben anfaengt und einem Kleinbuchstaben aufhoert. Dagegen passt /^($pattern).*\1$/ nur auf diejenigen Zeichenketten, die mit dem gleichen Kleinbuchstaben aufhoeren, mit dem sie anfangen.
pKai
 2005-03-23 15:11
#52858 #52858
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Ich hab mir die 2 RE mal mit debug angeschaut. Der wesentliche Unterschied ist wohl, dass \1 nicht als EXACT optimiert werden kann, da zu Beginn noch nichts über den Inhalt vorliegt.

Richtig, an den Unterschied Pattern (in Var) vs. String in (\1) hatte ich jetzt noch garnicht gedacht, obwohl ich eine CGI-Skript habe, wo ich genau das verwende (so ne Art mini BB-Code-Auswertung):
Code: (dl )
while ($t =~ /^(.*?)\[(xchx|url|b|color)(?:=(?:(?:"([^"]+)")|([^\]]+)))?\](.*?)\[\/\2\](.*)/is) {
I sense a soul in search of answers.
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2005-03-22 13:38.