Updated 2010-10-22 13:29:32 by dkf
string match ?-nocase? pattern string

See if pattern matches string; return 1 if it does, 0 if it doesn't. If -nocase is specified, then the pattern attempts to match against the string in a case insensitive manner.

Compare string equal which compares entire strings or parts of strings but NOT expressions.

For the two strings to match, their contents must be identical except that the following special sequences may appear in pattern:

  • * Matches any sequence of characters in string, including a null string.
  • ? Matches any single character in string.
  • [chars] Matches any character in the set given by chars. If a sequence of the form x-y appears in chars, then any character between x and y, inclusive, will match. When used with -nocase, the end points of the range are converted to lower case first. Whereas {[A-z]} matches '_' when matching case-sensitively ('_' falls between the 'Z' and 'a'), with -nocase this is considered like {[A-Za-z]} (and probably what was meant in the first place).
  • \x Matches the single character x. This provides a way of avoiding the special interpretation of the characters *?[]\ in pattern.

LV Does string match use the same code as glob for this?

No.
set hin [open "/tmp/sample.txt" "r"]
set data [read $hin]
close $hin

if [ string match -nocase "*test*" $data ] {
        puts "Found test"
} else {
        puts "Did not find test"
}


See also edit