Tcl regexp: Como verificar se a variável contém o número?

1

Abaixo está meu script tcl para verificar se existe algum número 0-9 na variável.

    set a "abc"

    if {[ regexp {[0-9]*} $a ]} {
       puts "Found number in $a"
    } else {
       puts "Doesn't find number in $a"
    }

Mas quando eu o executo, ele informa "Found number in abc".

    
por Fisher 16.05.2017 / 17:42

3 respostas

2

Isso porque você está usando uma expressão regular que significa "corresponde a 0 ou mais números". A string abc corresponde a 0 números, então você obtém um resultado positivo. Basta remover o * ("0 ou mais") e ele deve funcionar como esperado:

set a "a2bc"

if {[ regexp {[0-9]} $a ]} {
        puts "Found number in $a"
} else {
        puts "Doesn't find number in $a"
}
    
por 16.05.2017 / 17:50
1

Em uma expressão regular, * significa "zero ou mais do caractere ou classe especificado anteriormente". Então você está procurando por qualquer string com zero ou mais caracteres numéricos. Que combina com tudo.

    
por 16.05.2017 / 17:50
0

Você pode usar padrões no estilo glob para resolver isso sem precisar do poder das expressões regulares:

if {[string match {*[0-9]*} $a]} { ...

Veja a documentação string match .

    
por 16.05.2017 / 19:52