There are 6 string subcommands that do pattern and string matching. These are relatively fast operations, certainly faster than regular expressions, albeit less powerful.
string compare
string1
string2
string1
to string2
and returns:
string1
is less than string2
string1
is equal to string2
string1
is greater than string2
string first
string1
string2
string1
that starts the first match to
string2
, or -1 if there is no match.
string last
string1
string2
string1
that starts the last match to string2
, or -1 if there is no match.
string wordend
string
index
index
'th
character of string
. A word is any
contiguous set of letters, numbers or underscore characters,
or a single other character.
string wordstart
string
index
index
'th character of
string
. A word is any contiguous set of
letters, numbers or underscore characters, or a single other
character.
string match
pattern
string
pattern
matches
string
. The pattern
is a glob
style pattern.
set fullpath "/usr/home/clif/TCL_STUFF/TclTutor/Lsn.17" set relativepath "CVS/Entries" set directorypath "/usr/bin/" set paths [list $fullpath $relativepath $directorypath] foreach path $paths { set first [string first "/" $path] set last [string last "/" $path] # Report whether path is absolute or relative if {$first != 0} { puts "$path is a relative path" } else { puts "$path is an absolute path" } # If "/" is not the last character in $path, report the last word. # else, remove the last "/", and find the next to last "/", and # report the last word. incr last if {$last != [string length $path]} { set name [string range $path $last end] puts "The file referenced in $path is $name" } else { incr last -2; set tmp [string range $path 0 $last] set last [string last "/" $tmp] incr last; set name [string range $tmp $last end] puts "The final directory in $path is $name" } # CVS is a directory created by the CVS source code control system. # if {[string match "*CVS*" $path]} { puts "$path is part of the source code control tree" } # Compare to "a" to determine whether the first char is upper or lower case set comparison [string compare $name "a"] if {$comparison >= 0} { puts "$name starts with a lowercase letter\n" } else { puts "$name starts with an uppercase letter\n" } }