Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por que uma regex sem o ponto fica inválida

O ponto significa qualquer caractere. Mas veja

[012].[0-5]{2}min[0-5].

Por que não funciona? Por que não pega qualquer caractere? Outra expressão

[012]h[0-5]{2}min[0-5]s

também não funciona. Por outro lado o min que está depois de um quantifier dispensa o uso do ponto.

Abaixo a expressão que deu certo:

[012].h[0-5]{2}min[0-5].s
1 resposta
solução!

O problema foi o uso incorreto da classe.

Veja como deveria ser a regex para 24 horas: [0-2]?[0-9]h[0-5]?[0-9]min[0-5]?[0-9]s

Uma regex mais genérica: [0-9]{1,2}h[0-9]{1,2}min[0-9]{1,2}s

A expressão 3 está inválida pois como o ponto representa qualquer caracter vai interpretar 12h25min10s mas também 1ah2bmin1cs.

Explicando o seu erro

Ponto representa sim qualquer caracter, e o seu erro não foi esse.

  1. [012] - Significa que você quer 0, 1, ou 2 (apenas 1 caracter)
  2. em seguida você coloca o ponto, ou seja, pega qualquer caracter (somando ao primeiro ficaria: 10, 1a, 1x, 1-, ...)
  3. [0-5]{2} - Invalido para minutos pois não iria considerar nenhum numero superior a 5 (Ex: 36, 57, ...).

Acho que ja deu para te ajudar a entender onde está o problema :)