Regex comment faire correspondre un caractère facultatif
J'ai une regex que j'ai pensé fonctionnait correctement jusqu'à présent. J'ai besoin de correspondre à un caractère facultatif. Il peut être là ou il ne peut pas.
Voici deux chaînes. Le haut de la chaîne de correspondance est alors que la baisse n'est pas. L'absence d'une seule lettre dans la chaîne inférieure est ce qui est le faire échouer.
Je voudrais obtenir la lettre seule après le départ de 5 chiffres si il existe et si non, continuer à obtenir le reste de la chaîne. Cette lettre peut être A-Z
.
Si je supprime ([A-Z]{1}) +.*? +
de la regex, elle correspond à tout ce dont j'ai besoin à l'exception de la lettre, mais c'est important.
20000 K Q511195DREWBT E00078748521
30000 K601220PLOPOH Z00054878524
Voici la regex que j'utilise.
/^([0-9]{5})+.*? ([A-Z]{1}) +.*? +([A-Z]{1})([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) +([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/
Vous devez vous connecter pour publier un commentaire.
Utilisation
pour rendre la lettre en option.
{1}
est redondante. (Bien sûr, vous pouvez également écrire[A-Z]{0,1}
qui signifierait la même, mais c'est ce que l'?
est là pour ça.)Vous pourriez améliorer votre regex pour
Et puisque, dans la plupart des regex dialectes,
\d
est le même que[0-9]
:Mais: avez-vous vraiment besoin 11 séparé de capturer les groupes? Et si oui, pourquoi ne pas vous capturez la quatrième à dernier groupe de chiffres?
Vous pouvez faire de la seule lettre en option par l'ajout d'un
?
après comme:Le quantificateur
{1}
est redondant de sorte que vous pouvez laisser tomber.Vous devez marquer la seule lettre que facultatif trop:
ou faire de l'ensemble de la partie optionnelle
Vous pouvez aussi utiliser le plus simple regex conçu pour votre cas comme
(.*)\/(([^\?\n\r])*)
où$2
correspondre à ce que vous voulez.