web-dev-qa-db-fra.com

Chaîne vide Preg Match

Comment preg_match pour une chaîne nulle (vide)?

J'ai besoin de quelque chose comme:

/([0-9]|[NULL STRING])/
32
Denis Pshenov

Vous pouvez utiliser ^ pour faire correspondre le début de ligne et $ pour faire correspondre la fin de ligne, ainsi l'expression régulière ^$ correspondrait à une ligne/chaîne vide. 

Votre exemple spécifique (une ligne/chaîne contenant un seul chiffre ou étant vide) serait plus facile à réaliser avec ^[0-9]?$.

61
Mikael Auno

Avec l'expression rationnelle de PHP, vous pouvez simplement dire:

/(\d|)/

Cela peut être utile ...

5
Jrgns

Vous pouvez également faire correspondre un caractère null avec \0. Est-ce ce que vous vouliez dire par [NULL STRING]??. Cette expression pourrait être /([0-9]|\0)/.

Je devais le faire, en Java, pour les 4 derniers pour un numéro CC. Le champ est facultatif et peut donc être vide ou composé de 4 chiffres. Ma solution est:

^\d{4}$|^$

En passant ceci à une valeur null de la manière typique de Java, une exception de pointeur null apparaît:

String myString = null;
last4Pattern.matcher(myString).matches(); //Null in this case.

Cependant, j'estime qu'il s'agit davantage d'un problème d'implémentation Java.

1
Pete B.

Comme il n'est pas facile de faire correspondre une chaîne vide mais qu'il est généralement possible de faire correspondre tout ce qui n'est pas une chaîne vide, envisagez de le retourner et que not ne fait pas correspondre le inverse (double négatif).
Dans cet exemple, tout ce qui est pas (^) a un non -digit (\D) pour zéro ou une fois (?):

[^\D]?

(ou pour ascii spécifique:[^\x00-\x29\x3a-\xff]?, ou unicode:[^\u0000-\u0029\u003a-\uffff]?)

Correspond à un "" (<chaîne vide>), "0", "1" .. "9", mais pas un "", (<space>), "A" (non numérique) ou "123" (toute chaîne plus longue).

0
iRon