Expressão regular > String.matches [Resolvido]

Olá, minha primeira vez usando expressão regular e tô apanhando aqui.

As strings que preciso que passem válidas são:

C6N.TFI.VOPR.*
C6N.TFI.V003.*
M6N.TFI.VOPR.*
M6N.TFI.V003.*
(qualquer coisa depois do terceiro ponto)

a expressão que tô usando é:

string.matches("^(C6N)|(M6N)\\.(TFI)\\.(V003)|(VOPR)\\.*$");

O que está errado?

Obrigado pela ajuda.

“(C6N|M6N)\.TFI\.(VOPR|V003)\…*”

Obrigado pela ajuda.

Não tinha me tocado que o ‘*’ não significa a repetição de qualquer caracter mas sim do anterior.

Este é um problema muito comum a quem já aprendeu os “wildcards” do Windows ou do Unix / Linux shell e acha que as expressões regulares são apenas uma extensão do conceito de wildcards.

O “wildcard” “" é equivalente, em expressões regulares, a ".
O “wildcard” “?” é equivalente, em expressões regulares, a “.?”
O “.” que aparece em nomes de arquivos não tem um equivalente muito próximo em expressões regulares porque seu significado depende um pouco de onde ele aparece.

Por exemplo, escrever “.” não quer dizer “quero um nome de arquivo que tenha pelo menos um ponto” - ou seja, em expressões regulares, “.\…” mas sim “quero todos os arquivos”, ou seja, “.*”.