2010-04-30 14 views
0

Je suis un programmeur TCL novice. Ici je vais - Mon 1er message avec le forum de stackoverflow.TCL d'expression régulière en utilisant la procédure

Je voudrais écrire une expression régulière qui correspond à & seules les chaînes commencent par le caractère A et se termine par B. Quels que soient les caractères entrants entre eux doivent être affichés. Par exemple AXIOMB comme une entrée de l'utilisateur qui commence par une fin & caractère B.

Voici mon essai

regexp { (^A([C-Z]+)B$)} 

Merci

+0

Bienvenue dans StackOverflow! Une question: qu'en est-il de 'ARAB'? Est-ce un mot légal? –

Répondre

3

Vous êtes très proche:

set stringToTest "AXIOMB" 
set match [regexp {^A([C-Z]*)B$} $stringToTest -> substring] 
if {$match} { 
    puts "The middle was $substring" 
} 

(Le -> est en fait un nom de variable inhabituel mais ici j'utilise ce symbole bec Utilisez-le plutôt que d'utiliser l'équivalent someRandomDummyVariable. :-))

Si vous cherchez à obtenir la chaîne à tester à partir de la ligne de commande ou la console, voici comment:

arguments de ligne de commande (sans le nom de l'interpréteur Tcl ou le script) sont présenté sous forme de liste dans la variable de liste globale argv. Le premier est donc [lindex $::argv 0].

Une ligne peut être lue à partir de la console via la commande gets.

set line [gets stdin]; # you can use other channel names too, of course 

Notez que, contrairement à C, gets en Tcl est fortement défendue contre les dépassements de tampon et la (presque) pleine puissance de scanf() est à peu près équivalente à scan [gets stdin] ... (sauf pour certains formats exclus pour des raisons de sécurité).

+0

@ Merci beaucoup Donal Fellows. Très appréciée. Juste voudrais savoir comment obtenir cette chaîne de l'utilisateur dans la ligne de commande. En 'C' nous utilisons comme scanf. – user329763

+0

Permet de modifier cela dans. –