Thread Doppelbuchstaben umklammern (war: Help) (22 answers)
Opened by Gast at 2006-04-10 16:52

sid burn
 2006-04-11 02:06
#64681 #64681
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=Dubu,10.April.2006, 23:23]Dann probier's nochmal. ;)
Oder lies perlre.

Quote
Das mit dem Unterstrich ist wohl war, ließe sich aber auch ohne die Posix Zeichenklasse lösen.

Und wie?

Quote
Und 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 ...

Tja, ist wohl POSIX-Standard.[/quote]
Also bei mir hat "\w" noch nie auf "1" gematcht. Kann ich so oft wiederholen wie ich möchte. Und 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. Was 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.

Wenn du es also so siehst ist "\w" identisch zur folgenden Zeichenklasse: "[[:alpha:]_]". Naja fast. Unicode Zeichen können sich nämlich aus mehrere einzelnen zeichen zusammen setzen, und ein neues zeichen Bilden. Das erkennt "\w" nicht. Aber "\X" erkennt das als ein zeichen. Ich denke mal "[:alpha:]" erkennt solche zusammengesetzte Zeichen auch. Allerdings 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?


Du verwechselst jetzt aber nicht "\w" mit "\W", oder? Das zweite matcht schon auf Ziffern...


Ohne Posix Zeichenklasse könnte man das folgendermaßen lösen.

Code: (dl )
s/(?!_)(\w)\1/($1$1)/ig


Ist ein Negatives Lookahead Konstrukt das auf eine Position matcht, wenn danach kein "_" kommt. Also kurz gesagt jedes "_" wird überpsungen. Danach wird "\w" angewendet. Da ja jedes "_" übersprungen wird, kann ja nur noch ein alphanumerisches zeichen in der Variablen $1 sein.

Natürlich auch alle Möglichen Unicode alphanumerischen Zeichen die zum aktuellen locale gehören. Was aber denke ich gewünscht sein sollte.

Quote
Tja, ist wohl POSIX-Standard.

Nichts gegen den Posix Standard. Aber was Reguläre Ausdrücke angeht ist der Posix Standard Meiner Meinung nach Müll.\n\n

<!--EDIT|sid burn|1144708959-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Doppelbuchstaben umklammern (war: Help)