Hallo Glory!
Wie sieht Dein gesamter Ausdruck aus? Ich kenne JEdit nicht, aber aus der RegEx-Syntax, der ich bisher kenne, sind unter eckigen Klammern Zeichenklassen definiert. Was bedeuten sie also bei Dir?
[^#.*?#]
würde bedeuten: Match alles aus einer Zeichenklasse, die aus keinem Rautezeichen, beliebig, aber möglichst wenig aller möglichen Zeichen und einem Rautezeichen besteht
Das heißt, alles wird ersetzt, bis auf "kein Rautezeichen". Kein Rautezeichen wird ersetzt, du hast in deinem String sechs davon, sie werden ausgegeben. Perl-Test:
perl -w
use strict;
my $str = "aaaaaaaaaaaaa#XXX#aaaaaaaa#YYYY#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaa#ZZZZZ#aaaaaaaaaaaaaaaaaaaaaaaaa";
$str =~ s/[^#.*?#]//g;
print $str;
^Z
Die gleiche Ausgabe (die Du nicht wünschst) erreichst Du durch:
$str =~ s/[^#]//g;
Du willst aber die Rautezeichen UND den darin enthaltenen Inhalt:
Aus diesen Zeichen (ohne die ----) soll am ende #XXX##YYYY##ZZZZZ# werden
Das heißt, Du willst alles, was weder vor noch hinter einem Rautezeichen steht (hier also alles ausser den vielen "a").
use strict;
my $str = "aaaaaaaaaaaaa#XXX#aaaaaaaa#YYYY#aaaa
aaa#ZZZZZ#aaaaaaaaaaaaaaaaaaaaaaaaa";
$str =~ s/.+?(#\w+#)/$1/g;
print $str;
^Z
#XXX##YYYY##ZZZZZ#aaaaaaaaaaaaaaaaaaaaaaaaa
Die "a"s am Ende bekomme ich nicht weg - bin ja noch kein RegExPert (*g*) und außerdem brauchst Du Deinen Ausdruck sicher, um etwas anders als "a"s weg zu bekommen. Irgendwas mit zero-width Assertions muss noch darin, aber so weit bin ich noch nicht, dass ich das meistere. Hoffe, es ist schon mal ein Ansatz für Dich, weiter zu forschen.
Viele Grüße aus Frankfurt/Main,
Patrick