Frage

Ich würde wirklich gerne w verwenden, aber es passt auch zu Unterstrichen, also gehe ich mit [a-za-z], was sich unnötig ausführlich und Amerika zentriert fühlt. Gibt es einen besseren Weg, dies zu tun? So etwas wie [ w^_] (ich bezweifle, dass ich diese Syntax richtig gemacht habe)?

War es hilfreich?

Lösung

Du könntest benutzen /[a-z]/i oder /[[:alpha:]]/ genausogut. In der Tat, \w Beinhaltet Zahlen, damit nicht einmal funktioniert.

Andere Tipps

Vielleicht meinst du /[[:alpha:]]/? Sehen Perlre Für die Diskussion von POSIX -Charakterklassen.

Benutz einfach \p{L} was "jeder Unicode -Buchstaben" bedeutet und arbeitet in Perl (arbeitet in Perl (/\p{L}/). Sie müssen wahrscheinlich use utf8;.

Die Übereinstimmung mit internationalen (dh Nicht-ASCII) -Farakteren ist irgendwie schwierig und könnte von vielen Dingen abhängen. Schauen Sie sich dieses Beispiel an:

#!perl -w

use strict;
use utf8;

my $string = "ä";

print "matched :alpha:\n"  if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n"   if $string =~ /[a-z]/i;
print "matched [A-z]\n"    if $string =~ /[A-z]/;

Für mich führt dies dazu

matched :alpha:

Wenn Sie das entfernen use utf8 Dann entspricht keiner der regulären Ausdrücke.

Anschauen Diese sehr relevante Frage, es sieht so aus, als ob du es wahrscheinlich willst use utf8 und prüfen Sie Unicode :: Semantik.

Wenn Sie gerade ASCII -Zeichen verwenden, wird natürlich der oben genannte reguläre Ausdruck funktionieren.

[^\W0-9_]

# or

[[:alpha:]]

Siehe PERLDOC Perlre

Ein paar Optionen:

1. /[a-z]/i               # case insensitive
2. /[A-Z]/i               # case insensitive
3. /[A-z]/                # explicit range listing (capital 'A' to lowercase 'z')
4. /[[:alpha:]]/          # POSIX alpha character class

Ich empfehle, entweder den Fall-unempfindlich oder den wahren Weg zu verwenden /[a-zA-z]/, Es sei denn, Sie haben eine bestimmte Sprachpräferenz im Sinn.

Notiz:

  • Nummer 3 erfordert das Kapital "A" zuerst und dann in Kleinbuchstaben "Z" aufgrund der Reihenfolge der ASCII -Werte; Es funktioniert nicht, wenn Sie umgekehrt sind: a-Z. Ebenfalls: Diese Methode würde die Kriterien no-underscore nicht bestehen, da sie enthält [ \ ] ^ _ ` .
  • Nummer 4 stimmt mit diesen zusätzlichen Sprachfiguren überein, aber es stimmt auch überein:
    ʹʺʻˍˎˏːˑˬˮ̀́ (plus viele andere)

Sie suchen nach Internationalisierung in Ihrem Regex? Dann müssen Sie so etwas tun, wie dieser Typ getan hat: JavaScript -Validierungsproblem mit internationalen Charakteren

explizit mit allen Mondsprachbuchstaben übereinstimmen :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top