Tcl - Expresiones regulares

El comando "regexp" se usa para hacer coincidir una expresión regular en Tcl. Una expresión regular es una secuencia de caracteres que contiene un patrón de búsqueda. Consta de varias reglas y la siguiente tabla explica estas reglas y su uso correspondiente.

No Señor. Regla y descripción
1

x

Coincidencia exacta.

2

[a-z]

Cualquier letra minúscula de az.

3

.

Cualquier personaje.

4

^

La cadena inicial debe coincidir.

5

$

La cadena final debe coincidir.

6

\^

Secuencia de reacción para que coincida con el carácter especial ^. De manera similar, se puede utilizar para otros caracteres.

7

()

Agregue las secuencias anteriores entre paréntesis para hacer una expresión regular.

8

x*

Debe coincidir con 0 o más apariciones de la x anterior.

9

x+

Debe coincidir con 1 o más ocurrencias de la x precedente.

10

[a-z]?

Debe coincidir con 0 o 1 aparición de la x anterior.

11

{digit}

Coincide exactamente con las apariciones de dígitos de la expresión regular anterior. Dígito que contiene 0-9.

12

{digit,}

Coincide con ocurrencias de 3 o más dígitos de expresiones regulares anteriores. Dígito que contiene 0-9.

13

{digit1,digit2}

Las apariciones coincide con el rango entre las apariciones digit1 y digit2 de la expresión regular anterior.

Sintaxis

La sintaxis de regex se da a continuación:

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

Aquí, regex es el comando. Veremos sobre los interruptores opcionales más adelante. Los patrones son las reglas mencionadas anteriormente. La cadena de búsqueda es la cadena real en la que se realiza la expresión regular. La coincidencia completa es cualquier variable para contener el resultado del resultado de expresiones regulares coincidentes. Submatch1 a SubMatchn son una variable subMatch opcional que contiene el resultado de los patrones de subcoincidencia.

Veamos algunos ejemplos simples antes de sumergirnos en los complejos. Un ejemplo simple de una cadena con alfabetos. Cuando se encuentre cualquier otro carácter en la expresión regular, la búsqueda se detendrá y se devolverá.

#!/usr/bin/tclsh

regexp {([A-Za-z]*)} "Tcl Tutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"

Cuando se ejecuta el código anterior, produce el siguiente resultado:

Full Match: Tcl
Sub Match1: Tcl

Patrones múltiples

El siguiente ejemplo muestra cómo buscar varios patrones. Este es un patrón de ejemplo para cualquier alfabeto seguido de cualquier carácter seguido de cualquier 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"

Cuando se ejecuta el código anterior, produce el siguiente resultado:

Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial

A continuación se muestra una versión modificada del código anterior para mostrar que un subpatrón puede contener varios patrones:

#!/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"

Cuando se ejecuta el código anterior, produce el siguiente resultado:

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Conmutadores para el comando Regex

La lista de conmutadores disponibles en Tcl son,

  • nocase - Se usa para ignorar el caso.

  • indices - Almacene la ubicación de los subpatrones coincidentes en lugar de los caracteres coincidentes.

  • line- Nueva coincidencia sensible a la línea. Ignora los caracteres después de la nueva línea.

  • start index - Establece el desplazamiento del inicio del patrón de búsqueda.

  • Marca el final de los interruptores

En los ejemplos anteriores, he usado deliberadamente [AZ, az] para todos los alfabetos, puede usar fácilmente -nocase en lugar de como se muestra a continuación -

#!/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"

Cuando se ejecuta el código anterior, produce el siguiente resultado:

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Otro ejemplo de uso de interruptores se muestra a continuación:

#!/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"

Cuando se ejecuta el código anterior, produce el siguiente resultado:

Full Match: Tcl 
Sub Match1: Tcl 
Full Match: Tutorial
Sub Match1: Tutorial