Was ist deine Definition von characters? ASCII? Kanji? Iso-XXXX-X? UTF8?
Ivo Wetzel
45
Was ist deine Definition von regex? Perl? Emacs? Grep?
Pascal Cuoq
4
Angesichts der Tatsache, dass die Frage auf Englisch ist, ist es auf einer englischen Website fair anzunehmen, dass die Frage Zeichen auf Englisch betrifft.
Vaer-k
1
Ich habe festgestellt, dass \ p {L} für einen Buchstaben und / u Flag für den Unicode mit jedem Buchstaben in meinem /\p{L}+/u
regulären Ausdruck übereinstimmt,
4
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. Das ist wahr. Wie wir alle wissen, lokalisieren Englisch sprechende NIEMALS ihre Anwendungen!
Alex
Antworten:
392
Verwenden Sie einen Zeichensatz: [a-zA-Z]Entspricht einem Buchstaben von A bis Z in Klein- und Großbuchstaben. [a-zA-Z]+stimmt mit einem oder mehreren Buchstaben ^[a-zA-Z]+$überein und stimmt nur mit Zeichenfolgen überein, die nur aus einem oder mehreren Buchstaben bestehen ( ^und $markiert den Anfang bzw. das Ende einer Zeichenfolge).
Wenn Sie andere Buchstaben als A - Z finden möchten, können Sie sie entweder dem Zeichensatz hinzufügen : [a-zA-ZäöüßÄÖÜ]. Oder Sie verwenden vordefinierte Zeichenklassen wie die Unicode - Zeichen Eigenschaft Klasse , \p{L}die die Unicode - Zeichen beschrieben , die Buchstaben sind.
Das ist eine sehr ASCII-zentrierte Lösung. Dies wird auf so ziemlich jedem nicht englischen Text brechen.
Joachim Sauer
7
@ Joachim Sauer: Es wird eher auf Sprachen mit nicht-lateinischen Zeichen brechen.
Gumbo
15
Bricht bereits 90% des deutschen Textes ab, erwähnt nicht einmal Französisch oder Spanisch. Italienisch könnte trotzdem ziemlich gut abschneiden.
Ivo Wetzel
9
Das hängt davon ab, welche Definition von "lateinischem Charakter" Sie wählen. J, U, Ö, Ä können je nach Ihrer Definition als lateinische Zeichen bezeichnet werden oder nicht. Sie werden jedoch alle in Sprachen verwendet, in denen das "lateinische Alphabet" zum Schreiben verwendet wird.
Joachim Sauer
9
\ p {L} passt zu allen Umlauten, Sedilla-Akzenten usw., also sollten Sie damit weitermachen.
Radu Simionescu
198
\p{L} passt zu allem, was ein Unicode-Buchstabe ist, wenn Sie an Alphabeten interessiert sind, die über das lateinische hinausgehen
nicht in allen Regex-Geschmacksrichtungen. Beispielsweise werden vim-Regexe \pals "druckbares Zeichen" behandelt.
Philip Potter
3
Diese Seite schlägt vor, dass nur Java-, .net-, Perl-, Jgsoft-, XML- und XPath-Regexes \ p {L} unterstützen. Aber wichtige Auslassungen: Python und Ruby (obwohl Python das Regex-Modul hat).
Philip Potter
6
@Philip Potter: Ruby unterstützt Unicode-Zeicheneigenschaften mit genau derselben Syntax.
Jörg W Mittag
6
Ich denke, dies sollte sich \p{L}\p{M}*+um Buchstaben handeln, die aus mehreren Codepunkten bestehen, z. B. einen Buchstaben, gefolgt von Akzentzeichen. Gemäß
regulär-
mit Python 3 ergibt dies einen Fehlerbad escape \p at position 0
Matanster
46
Abhängig von Ihrer Bedeutung von "Charakter":
[A-Za-z]- alle Buchstaben (Groß- und Kleinbuchstaben)
Ich meinte Briefe. Es scheint jedoch nicht zu funktionieren. preg_match ('/ [a-zA-Z] + /', $ name);
Nike
[A-Za-z] ist nur die Deklaration von Zeichen, die Sie verwenden können. Sie müssen noch angeben, wie viele Male diese Deklaration verwendet werden muss: [A-Za-z] {1,2} (um 1 oder 2 Buchstaben abzugleichen) oder [A-Za-z] {1, *} (um übereinzustimmen 1 oder mehr Buchstaben)
@phuclv: In der Tat, aber das hängt von der Codierung ab, und die Codierung ist Teil der Einstellungen des Programms (entweder die Standardkonfiguration oder die in einer Konfigurationsdatei des Programms deklarierte). Wenn ich an verschiedenen Sprachen gearbeitet habe, habe ich das in einer Konstanten in einer Konfigurationsdatei gespeichert.
Catalina Chircu
1
Die @ CatalinaChircu-Codierung ist hier absolut irrelevant. Die Codierung ist eine Möglichkeit, einen Codepunkt in einem Zeichensatz in Binärform zu codieren. Beispielsweise ist UTF-8 eine Codierung für Unicode. Buchstaben OTOH hängt von der Sprache ab, und wenn man sagt, dass [A-Za-z]es sich um Buchstaben handelt, muss die verwendete Sprache angegeben werden
phuclv
32
Die nächstgelegene verfügbare Option ist
[\u\l]+
Dies entspricht einer Folge von Groß- und Kleinbuchstaben. Es wird jedoch nicht von allen Editoren / Sprachen unterstützt, daher ist es wahrscheinlich sicherer zu verwenden
Ein regulärer Ausdruck, den nur wenige Leute als "/ ^ [a-zA-Z] $ / i" geschrieben haben, ist nicht korrekt, da sie zuletzt / i erwähnt haben, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird und nach dem ersten Abgleich zurückgegeben wird. Anstelle von / verwende ich nur / g, was für global ist, und Sie müssen auch ^ $ nicht zum Starten und Beenden eingeben.
/[a-zA-Z]+/g
[a-z _] + einem einzelnen Zeichen in der folgenden Liste
Quantifizierer: + Zwischen ein und unbegrenzt oft, so oft wie möglich, nach Bedarf zurückgeben
az ein einzelnes Zeichen im Bereich zwischen a und z (Groß- und Kleinschreibung beachten)
AZ ein einzelnes Zeichen im Bereich zwischen A und Z (Groß- und Kleinschreibung beachten)
g Modifikator: global. Alle Spiele (nicht beim ersten Spiel zurückkehren)
\wist möglicherweise nicht in allen Fällen eine gute Lösung. Zumindest in PCRE \wkönnen auch andere Zeichen übereinstimmen. Zitat aus dem PHP-Handbuch : " Ein" Wort "-Zeichen ist ein beliebiger Buchstabe oder eine Ziffer oder ein Unterstrich, dh ein beliebiges Zeichen, das Teil eines Perl-" Wortes "sein kann. Die Definition von Buchstaben und Ziffern wird durch die Zeichentabellen von PCRE gesteuert. und kann variieren, wenn ein länderspezifischer Abgleich stattfindet. Beispielsweise werden im Gebietsschema "fr" (Französisch) einige Zeichencodes größer als 128 für Buchstaben mit Akzent verwendet, und diese werden mit \ w abgeglichen. "
Amal Murali
Wörter enthalten andere Zeichen aus Buchstaben
V-SHY
2
\wbedeutet übereinstimmende Buchstaben und Zahlen
Eugen Konkov
4
Wenn Sie Buchstaben in einer beliebigen Zeichenkodierung meinen, besteht ein guter Ansatz darin, Nichtbuchstaben wie Leerzeichen \s, Ziffern \dund andere Sonderzeichen wie:
[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]
Oder verwenden Sie die Negation der obigen Negation, um Buchstaben direkt zu beschreiben:
\S \D and[^..special chars..]
Vorteile:
Funktioniert mit allen Regex-Aromen.
Einfach zu schreiben, manchmal viel Zeit sparen.
Nachteile:
Lang, manchmal nicht perfekt, aber auch die Zeichenkodierung kann unterbrochen werden.
[^\W|\d]bedeutet nicht \Wund nicht |und nicht \d. Es hat den gleichen Nettoeffekt, da |es Teil von ist, \Waber das |funktioniert nicht so, wie Sie denken. Selbst dann bedeutet das, dass es den _Charakter akzeptiert . Sie suchen wahrscheinlich[^\W\d_]
OGHaza
Ich stimme dir zu, es akzeptiert das _. Aber "NICHT" |ist gleich "UND", [^\W|\d]bedeutet also: NICHT \WUND NICHT\d
Motlab
12
[^ab]bedeutet nicht aund nicht b. [^a|b]bedeutet nicht aund nicht |und nicht b. Ein zweites Beispiel zu geben [a|b|c|d]ist genau das gleiche wie [abcd|||]das, was genau das gleiche ist wie [abcd|]- alles, was ([a]|[b]|[c]|[d]|[|])dem entspricht, |ist ein Literalzeichen, kein ODER-Operator. Der OR-Operator wird zwischen jedem Zeichen in einer Zeichenklasse impliziert. Dies |bedeutet, dass die Klasse das |(Pipe-) Zeichen akzeptieren soll .
OGHaza
1
In letzter Zeit habe ich dieses Muster in meinen Formularen verwendet, um Namen von Personen zu überprüfen, die Buchstaben, Leerzeichen und Sonderzeichen wie Akzentzeichen enthalten.
characters
? ASCII? Kanji? Iso-XXXX-X? UTF8?regex
? Perl? Emacs? Grep?/\p{L}+/u
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English.
Das ist wahr. Wie wir alle wissen, lokalisieren Englisch sprechende NIEMALS ihre Anwendungen!Antworten:
Verwenden Sie einen Zeichensatz:
[a-zA-Z]
Entspricht einem Buchstaben von A bis Z in Klein- und Großbuchstaben.[a-zA-Z]+
stimmt mit einem oder mehreren Buchstaben^[a-zA-Z]+$
überein und stimmt nur mit Zeichenfolgen überein, die nur aus einem oder mehreren Buchstaben bestehen (^
und$
markiert den Anfang bzw. das Ende einer Zeichenfolge).Wenn Sie andere Buchstaben als A - Z finden möchten, können Sie sie entweder dem Zeichensatz hinzufügen :
[a-zA-ZäöüßÄÖÜ]
. Oder Sie verwenden vordefinierte Zeichenklassen wie die Unicode - Zeichen Eigenschaft Klasse ,\p{L}
die die Unicode - Zeichen beschrieben , die Buchstaben sind.quelle
\p{L}
passt zu allem, was ein Unicode-Buchstabe ist, wenn Sie an Alphabeten interessiert sind, die über das lateinische hinausgehenquelle
\p
als "druckbares Zeichen" behandelt.\p{L}\p{M}*+
um Buchstaben handeln, die aus mehreren Codepunkten bestehen, z. B. einen Buchstaben, gefolgt von Akzentzeichen. Gemäßbad escape \p at position 0
Abhängig von Ihrer Bedeutung von "Charakter":
quelle
[A-Za-z]
es sich um Buchstaben handelt, muss die verwendete Sprache angegeben werdenDie nächstgelegene verfügbare Option ist
Dies entspricht einer Folge von Groß- und Kleinbuchstaben. Es wird jedoch nicht von allen Editoren / Sprachen unterstützt, daher ist es wahrscheinlich sicherer zu verwenden
wie andere Benutzer vorschlagen
quelle
Sie würden verwenden
[] - prüft, ob zwischen den Eingaben Zeichen vorhanden sind
az --- deckt das gesamte Alphabet ab
g ----- global über die gesamte Zeichenfolge
i ----- Groß- und Kleinschreibung
quelle
Ein regulärer Ausdruck, den nur wenige Leute als "/ ^ [a-zA-Z] $ / i" geschrieben haben, ist nicht korrekt, da sie zuletzt / i erwähnt haben, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird und nach dem ersten Abgleich zurückgegeben wird. Anstelle von / verwende ich nur / g, was für global ist, und Sie müssen auch ^ $ nicht zum Starten und Beenden eingeben.
quelle
Java:
quelle
ŹŻŚĄ
Super einfaches Beispiel. Reguläre Ausdrücke sind online sehr einfach zu finden.
http://www.regular-expressions.info/reference.html
quelle
Für PHP funktioniert das Folgende einwandfrei
quelle
Verwenden Sie Zeichengruppen
Entspricht jedem Zeichen außer den Ziffern 0-9
Siehe Beispiel hier
quelle
Verwenden Sie einfach
\w
oder[:alpha:]
. Es handelt sich um eine Escape-Sequenz, die nur Symbolen entspricht, die möglicherweise in Wörtern vorkommen.quelle
\w
ist möglicherweise nicht in allen Fällen eine gute Lösung. Zumindest in PCRE\w
können auch andere Zeichen übereinstimmen. Zitat aus dem PHP-Handbuch : " Ein" Wort "-Zeichen ist ein beliebiger Buchstabe oder eine Ziffer oder ein Unterstrich, dh ein beliebiges Zeichen, das Teil eines Perl-" Wortes "sein kann. Die Definition von Buchstaben und Ziffern wird durch die Zeichentabellen von PCRE gesteuert. und kann variieren, wenn ein länderspezifischer Abgleich stattfindet. Beispielsweise werden im Gebietsschema "fr" (Französisch) einige Zeichencodes größer als 128 für Buchstaben mit Akzent verwendet, und diese werden mit \ w abgeglichen. "\w
bedeutet übereinstimmende Buchstaben und ZahlenWenn Sie Buchstaben in einer beliebigen Zeichenkodierung meinen, besteht ein guter Ansatz darin, Nichtbuchstaben wie Leerzeichen
\s
, Ziffern\d
und andere Sonderzeichen wie:Oder verwenden Sie die Negation der obigen Negation, um Buchstaben direkt zu beschreiben:
Vorteile:
Nachteile:
quelle
Sie können diesen regulären Ausdruck ausprobieren:
[^\W\d_]
oder[a-zA-Z]
.quelle
[^\W|\d]
bedeutet[^\W|\d]
bedeutet nicht\W
und nicht|
und nicht\d
. Es hat den gleichen Nettoeffekt, da|
es Teil von ist,\W
aber das|
funktioniert nicht so, wie Sie denken. Selbst dann bedeutet das, dass es den_
Charakter akzeptiert . Sie suchen wahrscheinlich[^\W\d_]
_
. Aber "NICHT"|
ist gleich "UND",[^\W|\d]
bedeutet also: NICHT\W
UND NICHT\d
[^ab]
bedeutet nichta
und nichtb
.[^a|b]
bedeutet nichta
und nicht|
und nichtb
. Ein zweites Beispiel zu geben[a|b|c|d]
ist genau das gleiche wie[abcd|||]
das, was genau das gleiche ist wie[abcd|]
- alles, was([a]|[b]|[c]|[d]|[|])
dem entspricht,|
ist ein Literalzeichen, kein ODER-Operator. Der OR-Operator wird zwischen jedem Zeichen in einer Zeichenklasse impliziert. Dies|
bedeutet, dass die Klasse das|
(Pipe-) Zeichen akzeptieren soll .In letzter Zeit habe ich dieses Muster in meinen Formularen verwendet, um Namen von Personen zu überprüfen, die Buchstaben, Leerzeichen und Sonderzeichen wie Akzentzeichen enthalten.
quelle
A-z
passt mehr als nur Buchstaben, sowieÀ-ú
Muster = / [a-zA-Z] /
setzt "[a-zA-Z]: # {pattern.match (" meine Blüte ")}" OK
setzt "[a-zA-Z]: # {pattern.match (" 456 ")}"
setzt "[a-zA-Z]: # {pattern.match (" ")}"
setzt "[a-zA-Z]: # {pattern.match (" # $% ^ & * ")}"
setzt "[a-zA-Z]: # {pattern.match (" # $% ^ & * A ")}" OK
quelle
quelle