Thread Unicode Zeichen in einer Regexp matchen?
(3 answers)
Opened by johann_p at 2008-04-12 11:39
Hi, die korrekte und Portable Methode ein Unicode Zeichen zu matchen ist wie du schon sagtest mit \N{...} damit dir die ganzen Namen zur Verfügung stehen musst du das pragma "use charnames ':full';" laden.
Quote Um dir noch zu erklärung warum dieser Weg unportabel ist. Unicode definiert nur Zeichen zu Codepoints (z.B: U+1234). Die Codepoints selber wiederrum können beliebig binär Codiert werden. UTF-8 ist eine Codierung, es gibt aber noch andere Unicode Codierungen wie UTF-16, UTF-32. Das gleiche Unicode Zeichen kann also unter den unterschiedlichen Codierungen anders binär aussehen. Direkt also mit \x{} die binäre darstellung zu matchen ist nicht gut. Weiterhin würde es nichtmal korrekt gehen wenn nur UTF-8 genutzt würde. Den das selbe Zeichen kann auch in UTF-8 mehrere Codierungen haben. Quote Wenn du das Zeichen auf der Tastatur eintippen kannst. Dann kannst du "Unicode::UCD" nutzen um dir die Unicode Daten anzeigen zu lassen. Hieraus kannst du dann die benötigten Daten auslesen. Code: (dl
)
1 #!/usr/bin/perl Dieses Beispiel gibt zu anfang mithilfe der charinfo() Methode die Informationen des Zeichens "ä" aus. charinfo muss man den Codepoint übergeben. Dieses bekommst du mit "ord()" heraus. charinfo selber gibt dann eine hash struktur mit den Infos zurück die ich sofort Dumpe. Aus diesen Hash habe ich dann den Langen Namen abgelesen und dir gezeigt wie du es in der Regex einbauen kannst. Ansonsten sind die "use" Statements zeimlich wichtig damit das ganze Funktioniert. Solltest du nicht Wissen was die einzelnen tuen dann lese selber nach oder Frag. ;) Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
|