J'ai une expression régulière qui, à mon avis, fonctionnait correctement jusqu'à présent. J'ai besoin de faire correspondre un caractère facultatif. Cela peut être là ou non.
Voici deux chaînes. La chaîne du haut correspond alors que la chaîne du bas ne l'est pas. L'absence d'une seule lettre dans la chaîne inférieure est ce qui le fait échouer.
J'aimerais obtenir la lettre unique après les 5 chiffres de départ si elle est là et sinon, continuer à obtenir le reste de la chaîne. Cette lettre peut être A-Z
.
Si je supprime ([A-Z]{1}) +.*? +
de l'expression régulière, cela correspondra à tout ce dont j'ai besoin sauf la lettre, mais c'est assez important.
20000 K Q511195DREWBT E00078748521
30000 K601220PLOPOH Z00054878524
Voici le 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 pouvez rendre la lettre unique facultative en ajoutant un
?
après elle comme suit:Le quantificateur
{1}
est redondant, vous pouvez donc le supprimer.la source
Vous devez également marquer la lettre unique comme facultative:
ou rendre la partie entière facultative
la source
Vous pouvez également utiliser une expression régulière plus simple conçue pour votre cas, comme
(.*)\/(([^\?\n\r])*)
où$2
correspond à ce que vous voulez.la source