Eu tenho uma regex que pensei que estava funcionando corretamente até agora. Preciso combinar com um caractere opcional. Pode estar lá ou não.
Aqui estão duas strings. A corda superior é correspondida enquanto a inferior não. A ausência de uma única letra na cadeia inferior é o que está fazendo com que ela falhe.
Gostaria de obter a letra única após os 5 dígitos iniciais, se ela estiver lá e, se não estiver, continue obtendo o restante da string. Esta carta pode ser A-Z
.
Se eu remover ([A-Z]{1}) +.*? +
do regex, ele corresponderá a tudo o que preciso, exceto a letra, mas é meio importante.
20000 K Q511195DREWBT E00078748521
30000 K601220PLOPOH Z00054878524
Aqui está o regex que estou usando.
/^([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})/
Você pode tornar a letra única opcional, adicionando um
?
depois como:O quantificador
{1}
é redundante para que você possa descartá-lo.fonte
Você também deve marcar a letra como opcional:
ou faça a parte inteira opcional
fonte
Você também pode usar regex mais simples, projetado para o seu caso, como
(.*)\/(([^\?\n\r])*)
onde$2
corresponde ao que você deseja.fonte