Como posso consertar meu regex tão parâmetro 3 estadias em grupo de captura 3?

bot_bot:

Eu tenho a seguinte expressão regex:

^(\d*)(?:\.)(\d*)(?:|(?:\.)(\d*))(?:|(?:\.)([a-zA-Z0-9_-]*))?$

Você pode testá-lo aqui .
Eu quero usá-lo para analisar um número de versão em grupos, por exemplo (onde G1 é o número do grupo 1 e assim por diante):

1.2              =>  g1(1),g2(2)    
1.2.3            =>  g1(1),g2(2),g3(3)    
1.2.3.4_or_text  =>  g1(1),g2(2),g3(3),g4(4_or_text)  

Esta quase funciona, salvo se o terceiro grupo é opcional, e salta para o quarto grupo se a versão tem 3 partes.
Então, o que realmente acontece é o seguinte:

1.2              =>  g1(1),g2(2)    
1.2.3            =>  g1(1),g2(2),g3(),g4(3)           <-- I want to fix this
1.2.3.4_or_text  =>  g1(1),g2(2),g3(3),g4(4_or_text) 

Eu não consigo identificar o que estou fazendo de errado.

A forma como ele está trabalhando agora também significa que o seguinte é válido: 1.2.3_or_textuma vez que é analisado comog1(1),g2(2),g3(),g4(3_or_text)

rock321987:

Você está tendo extra de alternation(|)expressão em seu regex

^(\d*)(?:\.)(\d*)(?:|(?:\.)(\d*))(?:|(?:\.)([a-zA-Z0-9_-]*))?$
                    ^               ^
                   this            this

Ele diz para combinar nada que sempre passa. Como resultado a sua segunda parte da alternância não corresponde.

Mais explicações : sintaxe Alternância é como

(?:a|b|c)

No seu caso anão é nada, é por isso que é sempre verdadeiro e partidas

Solução correta : Você também estão faltando grupo opcional e assumindo deve haver pelo menos um dígito ou alfabeto, esta deve ser regex correto

^(\d+)(?:\.)(\d+)(?:(?:\.)(\d+))?(?:(?:\.)([a-zA-Z0-9_-]+))?$

Bit de solução limpa

^(\d+)[.](\d+)(?:[.](\d+)(?:[.]([\w-]+))?)?$

regex Breakdown

^ #Start of string
 (\d+)[.] #Match digit and dot
 (\d+) #Match next group

 (?: #Non-capturing group
   [.](\d+) #Match dot and digit
   (?:[.]([\w-]+))? #Match dot and digit. This is optional
 )? #Third and Fourth match can be optional

$ #End of string

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=233190&siteId=1
Recomendado
Clasificación