Je dois valider la saisie: les variantes valides sont une chaîne de nombres ou de vide. Quel est l'expression régulière correspondante? UPD: ne suggère pas "\ d *" s'il vous plaît, je suis juste curieux comment dire "string vide" dans regexp. P> p>
7 Réponses :
Il ne devrait y avoir rien de mal avec juste "\ d + |" code> p>
Ce n'est pas correct. Une regex vide correspondra à la chaîne vide mais également (plusieurs fois) dans chaque chaîne non vide, à savoir chaque position avant ou après un caractère.
@TIM: Mais s'il s'agit de Java Correspondances CODE>, le motif sera corrigé contre la chaîne d'entrée totale i>. C'est-à-dire en Java, "bla" .matches ("") code> est false code>.
Correct. Pour clarifier, emballer en ^ et $ veillera à ce que vous parlez de la chaîne entière.
/^\d*$/ Matches 0 or more digits with nothing before or after.Explanation:The '^' means start of line. '$' means end of line. '*' matches 0 or more occurences. So the pattern matches an entire line with 0 or more digits.
Dans ce cas particulier, ^ \ d * $ code> fonctionnerait, mais de manière générale, pour correspondre à "code> modèle code> ou une chaîne vide, vous pouvez utiliser: String numbers = "012345";
System.out.println(numbers.replaceAll(".", "<$0>"));
// <0><1><2><3><4><5>
System.out.println(numbers.replaceAll("^.", "<$0>"));
// <0>12345
System.out.println(numbers.replaceAll(".$", "<$0>"));
// 01234<5>
numbers = "012\n345\n678";
System.out.println(numbers.replaceAll("^.", "<$0>"));
// <0>12
// 345
// 678
System.out.println(numbers.replaceAll("(?m)^.", "<$0>"));
// <0>12
// <3>45
// <6>78
System.out.println(numbers.replaceAll("(?m).\\Z", "<$0>"));
// 012
// 345
// 67<8>
correspondre explicitement à la chaîne vide, utilisez Vous pouvez également voir souvent Certaines saveurs de regex ne prennent pas en charge Si vous souhaitez autoriser "vide" comme dans "rien ni uniquement avec espace", puis allez pour \ a \ z code>. p>
^ $ code> qui fonctionne bien si l'option est définie pour autoriser le ^ code> et $ code> ancrages pour correspondre non seulement au début ou à la fin de la chaîne mais aussi au début / fin de chaque ligne. Si votre entrée ne peut jamais contenir de nouvelles lignes, alors bien sûr ^ $ code> est parfaitement ok. P>
\ a code> et \ z code> ancrages (en particulier JavaScript). P>
\ a \ s * \ z code> ou ^ \ s * $ code> . p>
Tout comme une solution amusante, vous pouvez faire:
\d+|\d{0}
Une du chemin d'affichage à l'ensemble de la langue normale comme fermeture des choses ci-dessous:
Le langage régulier en béton est un élément concret de cette fermeture. p>
Je n'ai trouvé pas de symbole vide dans standard de POSIX pour exprimer une idée de langue régulière de l'étape (1). P>
Mais il existe une question supplémentaire marque là-bas qui est par définition de POSIX est le suivant: p>
(regexp |
) p> blockquote> Vous pouvez donc faire de la manière suivante pour Bash, Perl et Python: P>
echo 9023 | grep -E "(1|90)?23" perl -e "print 'PASS' if (qq(23) =~ /(1|90)?23/)" python -c "import re; print bool(re.match('^(1|90)?23$', '23'))"
Pour effectuer n'importe quel motif qui correspond à une chaîne entière en option, c'est-à-dire permettre un motif correspond à une chaîne vide, utilisez un groupe optionnel em>: Voir le Démo Regex P> Si le moteur Regex permet (comme dans Java), préférez un Groupe de non-capture depuis son objectif principal consiste uniquement aux sous-cupendes de groupe, ne conservent pas les sous-valises capturées: p> une note d'utilisation Java: lorsqu'il est utilisé dans ^ code> correspondra au début d'un chaîne (ou \ a code> peut être utilisé dans de nombreuses saveurs pour cela), $ code> correspondra à la fin de la chaîne (ou \ z code> peut être utilisé. Correspondre à la fin de nombreuses saveurs, et java, aussi), et le (....)? code> correspondra à 1 ou 0 (en raison du quantificateur ? code> quantificateur) séquences em> des sous-cuisses à l'intérieur des parenthèses. P> correspondant () code>, le ^ code> et la trailing $ code> peut être omis et vous pouvez utiliser p>