Quelle est votre définition de characters? ASCII? Kanji? ISO-XXXX-X? UTF8?
Ivo Wetzel
45
Quelle est votre définition de regex? Perl? Emacs? Grep?
Pascal Cuoq
4
Étant donné que la question est en anglais, sur un site anglais, il est juste de supposer que la question concerne les caractères en anglais.
vaer-k
1
J'ai remarqué que \ p {L} pour une lettre et / u le drapeau pour l'Unicode correspond à n'importe quelle lettre de mon expression /\p{L}+/u
régulière
4
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. C'est vrai. Comme nous le savons tous, les anglophones ne localisent JAMAIS leurs applications!
Alex
Réponses:
393
Utilisez un jeu de caractères: [a-zA-Z]correspond à une lettre de A à Z en minuscule et en majuscule. [a-zA-Z]+correspond à une ou plusieurs lettres et ^[a-zA-Z]+$correspond uniquement aux chaînes composées d'une ou plusieurs lettres ( ^et $marque respectivement le début et la fin d'une chaîne).
Si vous voulez faire correspondre les autres lettres que A-Z, vous pouvez les ajouter au jeu de caractères: [a-zA-ZäöüßÄÖÜ]. Ou vous utilisez des classes de caractères prédéfinies comme la classe de propriétés de caractère Unicode\p{L} qui décrit les caractères Unicode qui sont des lettres.
C'est une solution très ASCII. Cela cassera à peu près n'importe quel texte non anglais.
Joachim Sauer
7
@Joachim Sauer: Cela va plutôt casser sur les langues utilisant des caractères non latins.
Gumbo
15
Déjà des pauses sur 90% du texte allemand, ne mentionnez même pas le français ou l'espagnol. L'italien pourrait quand même bien se débrouiller.
Ivo Wetzel
9
cela dépend de la définition de "caractère latin" que vous choisissez. J, U, Ö, Ä peuvent tous être considérés comme des caractères latins ou non, en fonction de votre définition. Mais ils sont tous utilisés dans des langues qui utilisent "l'alphabet latin" pour écrire.
Joachim Sauer
9
\ p {L} correspond à tous les accents de trémas, etc., donc vous devriez y aller.
Radu Simionescu
198
\p{L} correspond à tout ce qui est une lettre Unicode si vous êtes intéressé par des alphabets au-delà du latin
pas dans toutes les saveurs regex. Par exemple, les expressions régulières vim sont traitées \pcomme des "caractères imprimables".
Philip Potter
3
cette page ne propose que la prise en charge des expressions régulières java, .net, perl, jgsoft, XML et XPath \ p {L}. Mais omissions majeures: python et ruby (bien que python ait le module regex).
Philip Potter
6
@Philip Potter: Ruby prend en charge les propriétés des caractères Unicode en utilisant exactement la même syntaxe.
Jörg W Mittag
6
Je pense que cela devrait être \p{L}\p{M}*+pour couvrir les lettres composées de plusieurs points de code, par exemple une lettre suivie de marques d'accent. Selon regular-expressions.info/unicode.html
ZoFreX
avec python 3, cela donne une erreurbad escape \p at position 0
matanster
46
En fonction de votre signification de "caractère":
[A-Za-z]- toutes les lettres (majuscules et minuscules)
Je voulais dire des locations. Cela ne semble pas fonctionner. preg_match ('/ [a-zA-Z] + /', $ nom);
Nike
[A-Za-z] n'est que la déclaration de caractères que vous pouvez utiliser. Vous devez toujours déclarer combien de fois cette déclaration doit être utilisée: [A-Za-z] {1,2} (pour correspondre à 1 ou 2 lettres) ou [A-Za-z] {1, *} (pour correspondre 1 ou plusieurs lettres)
@phuclv: En effet, mais cela dépend de l'encodage, et l'encodage fait partie des paramètres du programme (soit la configuration par défaut, soit celle déclarée dans un fichier de configuration du programme). Lorsque je travaillais sur différentes langues, je les stockais dans une constante, dans un fichier de configuration.
Catalina Chircu
1
L'encodage @CatalinaChircu est absolument hors de propos ici. L'encodage est un moyen d'encoder un point de code dans un jeu de caractères en binaire, par exemple UTF-8 est un encodage pour Unicode. Les lettres OTOH dépendent de la langue, et si l'on dit que ce [A-Za-z]sont des lettres, la langue utilisée doit être spécifiée
phuclv
32
L'option la plus proche disponible est
[\u\l]+
qui correspond à une séquence de lettres majuscules et minuscules. Cependant, il n'est pas pris en charge par tous les éditeurs / langues, il est donc probablement plus sûr d'utiliser
L'expression régulière que peu de gens ont écrite comme "/ ^ [a-zA-Z] $ / i" n'est pas correcte car à la fin ils ont mentionné / i qui est insensible à la casse et après avoir correspondu pour la première fois, il reviendra. Au lieu de / i, utilisez simplement / g qui est pour global et vous n'avez pas non plus besoin de mettre ^ $ pour commencer et terminer.
/[a-zA-Z]+/g
[a-z _] + correspond à un seul caractère présent dans la liste ci-dessous
Quantificateur: + Entre une fois et un nombre illimité de fois, autant de fois que possible, en redonnant au besoin
az un seul caractère compris entre a et z (sensible à la casse)
AZ un seul caractère compris entre A et Z (sensible à la casse)
modificateur g : global. Tous les matchs (ne revenez pas au premier match)
\wpeut ne pas être une bonne solution dans tous les cas. Au moins dans PCRE, \wpeut également correspondre à d'autres caractères. Citant le manuel PHP : " Un" mot "est n'importe quelle lettre ou chiffre ou le caractère de soulignement, c'est-à-dire tout caractère pouvant faire partie d'un" mot "Perl. La définition des lettres et des chiffres est contrôlée par les tables de caractères de PCRE, et peut varier si une correspondance spécifique aux paramètres régionaux a lieu. Par exemple, dans les paramètres régionaux "fr" (français), certains codes de caractères supérieurs à 128 sont utilisés pour les lettres accentuées, et ils sont mis en correspondance par \ w. ".
Amal Murali
les mots incluent d'autres caractères des lettres
V-SHY
2
\wsignifie faire correspondre les lettres et les chiffres
Eugen Konkov
4
Si vous voulez dire des lettres dans n'importe quel codage de caractères, alors une bonne approche pourrait être de supprimer les non-lettres comme les espaces \s, les chiffres \det autres caractères spéciaux comme:
[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]
Ou utilisez la négation de la négation ci-dessus pour décrire directement les lettres:
\S \D and[^..special chars..]
Avantages:
Fonctionne avec toutes les saveurs regex.
Facile à écrire, économise parfois beaucoup de temps.
Les inconvénients:
Long, parfois pas parfait, mais l'encodage des caractères peut également être rompu.
[^\W|\d]signifie non \Wet non |et non \d. Il a le même effet net depuis qu'il |fait partie du \Wmais |ne fonctionne pas comme vous le pensez. Même alors, cela signifie qu'il accepte le _personnage. Vous recherchez probablement[^\W\d_]
OGHaza
Je suis d'accord avec vous, il accepte les _. Mais "NON" |est égal à "ET", cela [^\W|\d]signifie donc : NON \WET NON\d
Motlab
12
[^ab]signifie non aet non b. [^a|b]signifie non aet non |et non b. Pour donner un second exemple [a|b|c|d]est exactement le même que celui [abcd|||]qui est exactement la même que celle [abcd|]- qui assimilent à ([a]|[b]|[c]|[d]|[|])l' |est un caractère littéral, pas un opérateur OR. L'opérateur OR est implicite entre chaque caractère d'une classe de caractères, ce qui |signifie que vous voulez que la classe accepte le caractère |(pipe).
OGHaza
1
Dernièrement, j'ai utilisé ce modèle dans mes formulaires pour vérifier les noms des personnes, contenant des lettres, des blancs et des caractères spéciaux comme des marques d'accent.
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.
C'est vrai. Comme nous le savons tous, les anglophones ne localisent JAMAIS leurs applications!Réponses:
Utilisez un jeu de caractères:
[a-zA-Z]
correspond à une lettre de A à Z en minuscule et en majuscule.[a-zA-Z]+
correspond à une ou plusieurs lettres et^[a-zA-Z]+$
correspond uniquement aux chaînes composées d'une ou plusieurs lettres (^
et$
marque respectivement le début et la fin d'une chaîne).Si vous voulez faire correspondre les autres lettres que A-Z, vous pouvez les ajouter au jeu de caractères:
[a-zA-ZäöüßÄÖÜ]
. Ou vous utilisez des classes de caractères prédéfinies comme la classe de propriétés de caractère Unicode\p{L}
qui décrit les caractères Unicode qui sont des lettres.la source
\p{L}
correspond à tout ce qui est une lettre Unicode si vous êtes intéressé par des alphabets au-delà du latinla source
\p
comme des "caractères imprimables".\p{L}\p{M}*+
pour couvrir les lettres composées de plusieurs points de code, par exemple une lettre suivie de marques d'accent. Selon regular-expressions.info/unicode.htmlbad escape \p at position 0
En fonction de votre signification de "caractère":
la source
[A-Za-z]
sont des lettres, la langue utilisée doit être spécifiéeL'option la plus proche disponible est
qui correspond à une séquence de lettres majuscules et minuscules. Cependant, il n'est pas pris en charge par tous les éditeurs / langues, il est donc probablement plus sûr d'utiliser
comme le suggèrent d'autres utilisateurs
la source
Vous utiliseriez
[] - vérifie tous les caractères entre les entrées données
az --- couvre tout l'alphabet
g ----- globalement sur toute la chaîne
i ----- obtenir des majuscules et des minuscules
la source
L'expression régulière que peu de gens ont écrite comme "/ ^ [a-zA-Z] $ / i" n'est pas correcte car à la fin ils ont mentionné / i qui est insensible à la casse et après avoir correspondu pour la première fois, il reviendra. Au lieu de / i, utilisez simplement / g qui est pour global et vous n'avez pas non plus besoin de mettre ^ $ pour commencer et terminer.
la source
Java:
la source
ŹŻŚĄ
Exemple super simple. Les expressions régulières sont extrêmement faciles à trouver en ligne.
http://www.regular-expressions.info/reference.html
la source
Pour PHP, ce qui suit fonctionnera bien
la source
Utiliser des groupes de caractères
Correspond à n'importe quel caractère sauf les chiffres 0-9
Voir l'exemple ici
la source
Utilisez simplement
\w
ou[:alpha:]
. Il s'agit d'une séquence d'échappement qui ne correspond qu'à des symboles pouvant apparaître dans les mots.la source
\w
peut ne pas être une bonne solution dans tous les cas. Au moins dans PCRE,\w
peut également correspondre à d'autres caractères. Citant le manuel PHP : " Un" mot "est n'importe quelle lettre ou chiffre ou le caractère de soulignement, c'est-à-dire tout caractère pouvant faire partie d'un" mot "Perl. La définition des lettres et des chiffres est contrôlée par les tables de caractères de PCRE, et peut varier si une correspondance spécifique aux paramètres régionaux a lieu. Par exemple, dans les paramètres régionaux "fr" (français), certains codes de caractères supérieurs à 128 sont utilisés pour les lettres accentuées, et ils sont mis en correspondance par \ w. ".\w
signifie faire correspondre les lettres et les chiffresSi vous voulez dire des lettres dans n'importe quel codage de caractères, alors une bonne approche pourrait être de supprimer les non-lettres comme les espaces
\s
, les chiffres\d
et autres caractères spéciaux comme:Ou utilisez la négation de la négation ci-dessus pour décrire directement les lettres:
Avantages:
Les inconvénients:
la source
Vous pouvez essayer cette expression régulière:
[^\W\d_]
ou[a-zA-Z]
.la source
[^\W|\d]
signifie[^\W|\d]
signifie non\W
et non|
et non\d
. Il a le même effet net depuis qu'il|
fait partie du\W
mais|
ne fonctionne pas comme vous le pensez. Même alors, cela signifie qu'il accepte le_
personnage. Vous recherchez probablement[^\W\d_]
_
. Mais "NON"|
est égal à "ET", cela[^\W|\d]
signifie donc : NON\W
ET NON\d
[^ab]
signifie nona
et nonb
.[^a|b]
signifie nona
et non|
et nonb
. Pour donner un second exemple[a|b|c|d]
est exactement le même que celui[abcd|||]
qui est exactement la même que celle[abcd|]
- qui assimilent à([a]|[b]|[c]|[d]|[|])
l'|
est un caractère littéral, pas un opérateur OR. L'opérateur OR est implicite entre chaque caractère d'une classe de caractères, ce qui|
signifie que vous voulez que la classe accepte le caractère|
(pipe).Dernièrement, j'ai utilisé ce modèle dans mes formulaires pour vérifier les noms des personnes, contenant des lettres, des blancs et des caractères spéciaux comme des marques d'accent.
la source
A-z
correspond à plus que de simples lettres, ainsi queÀ-ú
modèle = / [a-zA-Z] /
met "[a-zA-Z]: # {pattern.match (" mine fleur ")}" OK
met "[a-zA-Z]: # {pattern.match (" 456 ")}"
met "[a-zA-Z]: # {pattern.match (" ")}"
met "[a-zA-Z]: # {pattern.match (" # $% ^ & * ")}"
met "[a-zA-Z]: # {pattern.match (" # $% ^ & * A ")}" OK
la source
la source