Moin Moin!
»» Nein. RegExps sollten alle Zeichen, die in Unicode als "Ll Letter, lowercase", "Lu Letter, uppercase" oder "Lo Letter, other" gekennzeichnet sind, auch als Buchstaben = Wortzeichen akzeptieren. (Richard Ishidas UniView zeigt die "General category" mit an.)
Toll. Perl müsste dann bei jedem Scriptaufruf eine Bibliothek von mehreren Tausenden Unicodes laden, um Regex parsen zu können. Schlimmer noch, diese Bibliothek ist in permanenter Entwicklung.
Richtig.
Wenn dies schon wünschbar wäre, warum dann nur ein \b und ein \w
Wären andere Nullweite Unicode-Klassengrenzen nicht auch wünschbar? Den Preis hast du ja schon bezahlt.
So wie ich Unicode Regular Expression Support Level lese, sind solche Dinge zwar vorgesehen, aber noch nicht implementiert.
Das ist der Grund warum ich postuliere:
\w ist in ASCII [A-Za-z0-9_]
Nur, wenn die C-Locale aktiv ist und Unicode seine Finger nicht im Spiel hat. Oder wenn Du Dich mit Javascript rumschlagen mußt.
perlre definiert \w ganz bewußt als 'alphanumeric plus "_"', was Buchstaben und Ziffern außerhalb des ASCII-Bereichs NICHT ausschließt.
\W ist als 'non-"word" character' definiert, matcht also alle Zeichen, die \w nicht matcht.
und \b ist die Grenze zwischen \W und \w oder zwischen \w und \W.
Exakt das ist die Definition von \b: A word boundary (\b) is a spot between two characters that has a \w on one side of it and a \W on the other side of it (in either order), counting the imaginary characters off the beginning and end of the string as matching a \W .
Alles andere ist nicht konsistent ausführbar.
Das einzige Problem hier ist die Definition von \w. Die ist traditionell, ohne Locale und Unicode zu berücksichtigen, [A-Za-z0-9_], und das ist auch ein guter Default. Für Programme, die sich nicht nur mit englischen Texten befassen, muß dieser Default änderbar sein.
Recht gebe ich darin, dass locale in CGI keinen Sinn macht.
Was an der CGI-Spezifikation definiert, dass Du keine sprach- bzw. landesabhängigen Einstellungen haben darfst? FastCGIs und mod_perl-Anwendungen dürften dann wieder Locale benutzen?
In einem Netzwerk möchte ich Konsistenz unabhängig der lokalen Maschine.
Dann definierst Du Dir am einfachsten Deine eigenen Character-Klassen oder verwendest konsequent Unicode und \p{L} / \P{L} statt \w und \W.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".