The problem often comes up "I have a string with quoted sections, I want to perform (some operation) on it, how do I do it?" A lot of time is spent playing with regexps, which can't really ever work. I decided to try to write a canonical parser for quoted expressions. I hope others will suggest better models, and that in the end we will have an implementation worthy of going into tcllib. [CMcC] 26Jun2012 There's also a [Parse Parenthesis] equivalent. ====== proc quopar {str {q \"}} { set depth 0 set result {} set skip 0 foreach c [split $str ""] { if {$c eq "\\"} { append run $c incr skip } elseif {$skip} { append run $c set skip 0 continue } if {$c eq $q} { if {[info exists run]} { lappend result $depth $run unset run } set depth [expr {($depth+1)%2}] } else { append run $c } } if {$depth > 0} { error "quopar dangling '$q' in '$str'" } if {[info exists run]} { lappend result $depth $run } return $result } if {[info exists argv0] && $argv0 eq [info script]} { package require tcltest namespace import ::tcltest::* verbose {pass fail error} set count 0 foreach {str result} { {""} "" {"\""} {1 {\\"}} {""""} "" {"moop"} "1 moop" {pebbles "fred wilma" bambam "barney betty"} "0 {pebbles } 1 {fred wilma} 0 { bambam } 1 {barney betty}" } { test quopar-[incr count] {} -body { quopar $str } -result $result } foreach {str} { {"} {"""} } { test quopar-[incr count] {} -body { quopar $str } -match glob -result * -returnCodes 1 } } ======