http://www.purl.org/tcl/home/man/tcl8.4/TclCmd/regsub.htm
[Feel free to add various examples, demonstrating the use of the various flags, etc.]
One example of using regsub from Brent Welch's BOOK Practical Programming in Tcl and Tk is:
regsub -- {([^\.]*)\.c} file.c {cc -c & -o \1.o} ccCmd
The & is replaced by file.c, and the \1 is replaced by file.
Recently on the Tcler's Wiki chat room, someone had the desire to convert a string like this:
rand ||=> this is some text <=|| rand
to
rand ||=> some other text <=|| rand set unique1 {\|\|=>} set unique2 {<=\|\|} set string {rand ||=> this is some text <=|| rand} set replacement {some other text} set new [regsub -- "($unique1) .* ($unique2)" $string "\\1$replacement\\2" string ] puts $new puts $string
Note that the regular expression metacharacters in unique1 and unique2 need to be quoted so they are not treated as metacharacters.
AM (7 october 2003) I asked about a complicated substitution in the chatroom:
Here is the question:
I have a fixed substring that delimits a variable number of characters. Anything in between (including the delimiters) must be replaced by a repetition of another string. For example:
1234A000aadA12234 --> 1234BXBXBXBX12234
(A000aadA is 8 characters, my replacing string fits 4 times in that)
arjen: I do not think I can use some clever regexp to do this ... (note: things will always fit)
arjen: The regexp to identify the substring could be: {A^A*A}
arjen: But now to get the replacing string ...
CoderX2 easy... one sec
CoderX2 set string "1234A000aadA12234"; set substring "BX"; regsub -all {(A^A*A)} $string {string repeat $substring [expr {[string length "\1" / string length $substring}]} new_string; set new_string subst $new_string
Tcl syntax help - Arts and crafts of Tcl-Tk programming - Category Command