![]() |
|< 1 2 3 >| | ![]() |
23 Einträge, 3 Seiten |
QuoteAllerdings matcht \w bei mir auf keine Ziffern..."0123", dafür gibt es ja "\d".
QuoteDas mit dem Unterstrich ist wohl war, ließe sich aber auch ohne die Posix Zeichenklasse lösen.
QuoteUnd habe gerade zum ersten mal die Posix Zeichenklasse "live" ausprobiert. habe da vorher immer nur drüber gelesen, da ich nie eine verwendung dafür sah. Das man es nur innerhlab einer Zeichenklasse benutzten kann ist ja mal ...
QuoteDas mit dem Unterstrich ist wohl war, ließe sich aber auch ohne die Posix Zeichenklasse lösen.
QuoteUnd habe gerade zum ersten mal die Posix Zeichenklasse "live" ausprobiert. habe da vorher immer nur drüber gelesen, da ich nie eine verwendung dafür sah. Das man es nur innerhlab einer Zeichenklasse benutzten kann ist ja mal ...
Quote\w Match a "word" character (alphanumeric plus "_")
s/(?!_)(\w)\1/($1$1)/ig
QuoteTja, ist wohl POSIX-Standard.
1
2
$ perl -Mstrict -Mwarnings -le 'my $str="a1+b2+c3"; $str =~ s/\w/./g; print $str'
..+..+..
QuoteUnd ein Blick in perlre bestätigt das gleiche.
Quote\w Match a "word" character (alphanumeric plus "_")
heißt für mich so viel wie matcht auf alle alphanumerischen zeichen + den unterstrich.
QuoteWas da aber nicht bei steht. Es matcht natürlich auch auf alle Unicode zeichen die in der Locale sind, und nicht nur auf [a-zA-Z_] was manche meinen.
QuoteWenn du es also so siehst ist "\w" identisch zur folgenden Zeichenklasse: "[[:alpha:]_]". Naja fast.
QuoteUnicode Zeichen können sich nämlich aus mehrere einzelnen zeichen zusammen setzen, und ein neues zeichen Bilden. Das erkennt "\w" nicht.
QuoteAber "\X" erkennt das als ein zeichen. Ich denke mal "[:alpha:]" erkennt solche zusammengesetzte Zeichen auch.
QuoteAllerdings finde ich in perlre dazu keine Informationen, dass es das auch tut. Ich kann aber Morgen nochmal im Reguläre Ausdrücke Buch nachlesen ob es das nun tut, oder nicht. Sollte aber an der Tatsache das es immer noch keine Ziffern erkennt nichts dran ändern?
QuoteDu verwechselst jetzt aber nicht "\w" mit "\W", oder? Das zweite matcht schon auf Ziffern...
QuoteDann ist dein Perl kaputt.
Beispiel gefällig?
Code: (dl )1
2$ perl -Mstrict -Mwarnings -le 'my $str="a1+b2+c3"; $str =~ s/\w/./g; print $str'
..+..+..
QuoteQuoteUnicode Zeichen können sich nämlich aus mehrere einzelnen zeichen zusammen setzen, und ein neues zeichen Bilden. Das erkennt "\w" nicht.
Hm. Wie meinst du das? Sowohl UTF-8 als auch UTF-16 bestehen natürlich aus Mehrbytesequenzen, das ist klar. Aber jede Sequenz sollte doch eindeutig sein, oder?
$string =~ s/(\w)\1/($1$1)/g; # buchstaben klammern
1
2
3
4
5
6
7
$string =~ s/
\b # wortgrenze
([A-Za-z]*?) # ev. Buchstaben bis zum ersten vorkommen
([A-Za-z]) \2 # des doppelbuchstabens
([A-Za-z]*?) # noch ev. weitere buchstaben, egal, ob doppelt oder nicht
\B # bis zur naechsten wortgrenze
/($1$2$2$3)/gx;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl
use strict;
use warnings;
my $string = "hallsso";
$string =~ s/
\b # wortgrenze
([A-Za-z]*?) # ev. Buchstaben bis zum ersten vorkommen
([A-Za-z]) \2 # des doppelbuchstabens
([A-Za-z]*?) # noch ev. weitere buchstaben, egal, ob doppelt oder nicht
\B # bis zur naechsten wortgrenze
/($1$2$2$3)/gx;
print $string,"\n";
![]() |
|< 1 2 3 >| | ![]() |
23 Einträge, 3 Seiten |