usar test online net como regex foreach tcl

test - Cómo usar foreach para usar regexp



regex c# online (2)

Según su comentario y la respuesta de Jerry, supongo que necesita

regexp -- {(?:cell)/s+?(/("/w+"/))} $searched -> matched_part_in_brakets puts $matched_part_in_brakets

o

regexp -- {(?:cell)/s+?(/("/w+"/))} $searched match matched_part_in_brakets puts $matched_part_in_brakets

Estoy usando el siguiente código para buscar datos en particular y almacenarlos en una variable.

foreach searched $names { [regexp {[cell]+} $searched match] }

Aquí los nombres son la variable que tiene muchos datos. Me aparece un mensaje de error que dice: Error: invalid command name "1. Soy nuevo en tcl, así que no puedo entender cuál es el error. ¿Mi código es correcto? ¿Funcionará? Gracias


Su expresión regular está evaluando primero y la regexp {[cell]+} $searched match 1 , que luego se convierte en:

[1]

Que es un comando inválido. Eliminar los corchetes:

regexp {[cell]+} $searched match

Ahora, no creo que estés usando la expresión regular correctamente. Esto buscará cualquiera de las combinaciones c , e y l al menos una vez, lo que significa que aceptará cell , lec o incluso c solo. Probablemente quieras:

regexp {((?:cell)+)} $searched match matched

Esto coincidirá con cell , cellcell , cellcellcell y cellcellcell y lo almacena en la variable matched .

Los corchetes se usan para capturar grupos coincidentes; y estos (?: ...) son para grupos que no capturan.

EDITAR: Siguiendo mi comentario, haría algo como:

set newlist [list] foreach searched $names { regexp {cell/s*/("([^"]+)"/)} $searched match matched lappend $newlist $matched }

Ahora, la lista $ newlist contiene todos los valores coincidentes. Puede hacer un foreach para mostrarlos todos;

foreach n $newlist {puts $n}