Thread Inhalt zwischen 2 Ausdrücken entfernen (14 answers)
Opened by stb2050 at 2005-03-22 13:38

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.

View full thread Inhalt zwischen 2 Ausdrücken entfernen