Tcl - Expressões regulares
O comando "regexp" é usado para corresponder a uma expressão regular em Tcl. Uma expressão regular é uma sequência de caracteres que contém um padrão de pesquisa. Ele consiste em várias regras e a tabela a seguir explica essas regras e o uso correspondente.
Sr. Não. | Regra e descrição |
---|---|
1 | x Combinação exata. |
2 | [a-z] Qualquer letra minúscula de az. |
3 | . Qualquer personagem. |
4 | ^ A string inicial deve corresponder. |
5 | $ A string final deve corresponder. |
6 | \^ Seqüência de folga para corresponder ao caractere especial ^. Da mesma forma, você pode usar para outros caracteres. |
7 | () Adicione as sequências acima entre parênteses para fazer uma expressão regular. |
8 | x* Deve corresponder a 0 ou mais ocorrências do x anterior. |
9 | x+ Deve corresponder a 1 ou mais ocorrências do x anterior. |
10 | [a-z]? Deve corresponder a 0 ou 1 ocorrência do x anterior. |
11 | {digit} Corresponde exatamente a ocorrências de dígitos da expressão regex anterior. Dígito que contém 0-9. |
12 | {digit,} Corresponde a 3 ou mais ocorrências de dígitos da expressão regex anterior. Dígito que contém 0-9. |
13 | {digit1,digit2} As ocorrências correspondem ao intervalo entre ocorrências de dígito1 e dígito2 da expressão regex anterior. |
Sintaxe
A sintaxe para regex é fornecida abaixo -
regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn
Aqui, regex é o comando. Veremos sobre opções opcionais mais tarde. Os padrões são as regras mencionadas anteriormente. A string de pesquisa é a string real na qual o regex é executado. A correspondência total é qualquer variável para conter o resultado do resultado regex correspondente. Submatch1 a SubMatchn são variáveis opcionais de subMatch que contêm o resultado dos padrões de subcasas.
Vejamos alguns exemplos simples antes de mergulhar nos complexos. Um exemplo simples para uma string com qualquer alfabeto. Quando qualquer outro caractere for encontrado na regex, a pesquisa será interrompida e retornada.
#!/usr/bin/tclsh
regexp {([A-Za-z]*)} "Tcl Tutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"
Quando o código acima é executado, ele produz o seguinte resultado -
Full Match: Tcl
Sub Match1: Tcl
Padrões Múltiplos
O exemplo a seguir mostra como pesquisar vários padrões. Este é um exemplo de padrão para qualquer alfabeto seguido por qualquer caractere seguido por qualquer alfabeto.
#!/usr/bin/tclsh
regexp {([A-Za-z]*).([A-Za-z]*)} "Tcl Tutorial" a b c
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"
Quando o código acima é executado, ele produz o seguinte resultado -
Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial
Uma versão modificada do código acima para mostrar que um subpadrão pode conter vários padrões é mostrada abaixo -
#!/usr/bin/tclsh
regexp {([A-Za-z]*.([A-Za-z]*))} "Tcl Tutorial" a b c
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"
Quando o código acima é executado, ele produz o seguinte resultado -
Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial
Opções para Comando Regex
A lista de opções disponíveis em Tcl são,
nocase - Usado para ignorar o caso.
indices - Armazene a localização de subpadrões correspondentes em vez de caracteres correspondentes.
line- Nova correspondência de linha sensível. Ignora os caracteres após a nova linha.
start index - Define o deslocamento do início do padrão de pesquisa.
Marca o fim dos interruptores
Nos exemplos acima, usei deliberadamente [AZ, az] para todos os alfabetos, você pode facilmente usar -nocase em vez de como mostrado abaixo -
#!/usr/bin/tclsh
regexp -nocase {([A-Z]*.([A-Z]*))} "Tcl Tutorial" a b c
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"
Quando o código acima é executado, ele produz o seguinte resultado -
Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial
Outro exemplo usando interruptores é mostrado abaixo -
#!/usr/bin/tclsh
regexp -nocase -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"
regexp -nocase -start 4 -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"
Quando o código acima é executado, ele produz o seguinte resultado -
Full Match: Tcl
Sub Match1: Tcl
Full Match: Tutorial
Sub Match1: Tutorial