Pour valider si l'entrée est un nombre à virgule flottante, vous n'avez pas besoin d'une regex dans la plupart des cas, il suffit d'utiliser les classes intégrées pour analyser la chaîne d'entrée, et pour vérifier si une chaîne est égale à une autre, utilisez la méthode correspondante.
Si vous n'avez pas accès au code, vous pouvez utiliser une alternance :
"^(?:(?:[1-9]\\d*|0)?(?:[.]\\d+)?|MY STRING)?$"
^^^ ^^^^^^^^^^^^
En La démo de regex est ici
En bref :
-
^
- début de la chaîne
-
(?:
- début du groupe optionnel de non-capture
-
(?:[1-9]\d*|0)?(?:[.]\d+)?
- votre modèle précédent
-
|
- ou
-
MY STRING
- littéral MY STRING
sous-chaîne
-
)?
- fin de l'option (en raison de ?
) groupe non capturant
-
$
- fin de la chaîne
Si MY STRING
est une variable d'entrée utilisateur qui doit être traitée comme un littéral, et si vous avez accès au code alors vous devriez penser à échapper à cette chaîne avec une méthode d'échappement de type regex (en Java, utiliser Pattern.quote(user_str)
).