Was ist der beste Weg, um match nur Buchstaben in einem regex?
Ich würde wirklich gerne, \w, aber es passt auch Unterstrichen, also werde ich mit [A-Za-z] die fühlt sich unnötig verbose und Amerika zentrierte. Gibt es einen besseren Weg, dies zu tun? So etwas wie [\w -^_] (ich bezweifle, dass ich die syntax richtig)?
[A-Za-z]
ist nicht Amerika-zentrische, es ist ASCII-centric.Ich würde sagen, es ist Latein-centric, wie ASCII wird nur verwendet das lateinische alphabet.
Quellen? AFAIK viele Latein abgeleiteten Sprachen, betonten Vokale und Buchstaben. [A-Za-z] nicht entsprechen, weder Deutsch noch Française. Auch Reine Lateinamerika hat die Æ-Glyphe, die nicht in ASCII. Die lateinischen reden Sie?
Klassischen 23 Zeichen dem lateinischen alphabet + die Mittelalterliche J, U, & W
InformationsquelleAutor SapphireSun | 2010-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie
/[a-z]/i
oder/[[:alpha:]]/
genauso gut. In der Tat\w
enthält zahlen, so dass gar nicht arbeiten.i
macht es groß-und Kleinschreibung?Das ist richtig.
Das ist einfach die falsche Antwort. Lesen Sie weiter unten.
InformationsquelleAutor mkb
Vielleicht meinst du
/[[:alpha:]]/
? Sehen perlre für die Diskussion von POSIX Charakter-Klassen.:alpha:
nocha-zA-Z
Ich war falsch; die perldocs aktualisiert werden soll. Allerdings enthält es zusätzliche Interpunktion:
ʹʺʻˍˎˏːˑˬˮ̀́
Ihr Kommentar ist undicht...
Purdy: undicht?
Die zusätzliche Satzzeichen schwappt über die Bemerkung in Ihrem Benutzernamen. (Firefox 3.6.10 auf Windows XP)
InformationsquelleAutor zigdon
Verwenden Sie einfach
\p{L}
was bedeutet "jedes beliebige Unicode-Buchstaben" und arbeitet in Perl (/\p{L}/
). Sie wahrscheinlich benötigen, umuse utf8;
.InformationsquelleAutor Tim Pietzcker
Passenden international (ich.e nicht-ASCII -) Zeichen ist eine Art hart, und hängen von einer Menge Dinge. Schauen Sie sich dieses Beispiel:
Für mich diese Ergebnisse in
Wenn Sie entfernen die
use utf8
dann keiner der regulären Ausdrücke übereinstimmen.Blick auf diese sehr relevante Frage, wie es aussieht, werden Sie wahrscheinlich wollen, um
use utf8
- und check-out Unicode::Semantik.Natürlich, wenn Sie gerade ASCII-Zeichen als bei den oben genannten regulären Ausdrücken arbeiten.
Das, was Ihr editor anzeigen als 'ä' kann nicht einen Brief in Perl. 'ä' = "\xE4" definiert ist, nicht im ASCII-Zeichensatz standardmäßig wird von Perl verwenden Sie die ASCII-Charakter-Klassen für Zeichenfolgen, die nicht codiert als UTF-8. Hinzufügen
use utf8;
zu behandeln, wird Ihr Quelltext als UTF8 und "ä" ein Unicode-string. In der Unicode-Zeichensatz 'ä' ist ein alpha-Charakter. Vergleichen Sie$string = "ä";
vs$string = decode("iso-8859-1", "ä");
ohneuse utf8;
. Im ersten Fall wird von Perl binäre Daten, in der zweiten die binären Daten werden interpretiert als Latin-1 und in UTF-8 konvertiert.InformationsquelleAutor CanSpice
Siehe perldoc perlre
InformationsquelleAutor runrig
Wenige Optionen:
Ich empfehlen, entweder die groß-und Kleinschreibung, oder der wahre Weg
/[a-zA-z]/
, es sei denn, Sie haben eine bestimmte Sprache in den Sinn.Hinweis:
a-Z
. Auch: diese Methode Versagen würde keine-unterstreichen Kriterien, da es [ \ ] ^ _ ` .ʹʺʻˍˎˏːˑˬˮ̀́
(und viele andere)[A-z]
Sortiment umfasst eine Reihe von anderen Zeichen.Sie sind richtig, es gibt ein paar Klammern und weitere Zeichen, die brechen würde die " no-underscore Kriterien. Ich habe geändert, die Antwort. @Fliegen, ja, aber ich war falsch. Wirklich, die ersten beiden sind die gleiche Methode, nur zeigen können Sie verschiedene Eingänge.
InformationsquelleAutor vol7ron
du suchst Internationalisierung in deiner regex? dann müssen Sie etwas tun, wie dieser Kerl Tat: JavaScript-Validierung Problem mit internationalen Zeichen
explizit match auf alle der Mond die Sprache der Briefe 🙂
Wenn Sie Sie sehen, Sie sollen zu heulen
InformationsquelleAutor Oren Mazor