Visit Our UNIX and Linux User Community


tcl: regexp matching special character


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting tcl: regexp matching special character
# 1  
Old 01-09-2008
tcl: regexp matching special character

Hello Experts,

Can someone help me here:

I have a variable which contains a string with "[]".

set var1 {a[1]}
set str1 {a[1] is the element i want to match}

Now "regexp $var1 $str1" does not work?
("regexp {a\[1\]} $str1" works, but var1 gets it's value automatically from another script)

Is there a way to make it work?
(adding backslash "\" to var1 might not be feasible)
# 2  
Old 01-09-2008
Code:
% regexp {[$var1]} $str1
1

# 3  
Old 01-09-2008
doesn't look right to me

Can you explain 'How it works?'?

It doesn't seem right to me.

% set var1 {a[1]}
a[1]
% set str1 {a[1] is the element i want to match}
a[1] is the element i want to match
% regexp $var1 $str1
0
% regexp {[$var1]} $str1
1
% set var1 {a[10]}
a[10]
% regexp {[$var1]} $str1
1
% set var1 {a[9080]}
a[9080]
% regexp {[$var1]} $str1
1
# 4  
Old 01-09-2008
If you want a substring exact match that doesn't really rely on regexp syntax look at string match instead, but ymmv. I'm having trouble obtaining a sane result.You can always brute force the search..something like.

Code:
proc paramSearch {pattern str} {
set t [string length $pattern]
                for {set i 0} {$i < [string length $str]} {incr i $t} {
                    if {[string compare $pattern [string range $str $i [expr $i + [ expr $t - 1]]]] == 0} {return 1; #puts "Match at string index: $i"}
                    #puts "Compared $pattern and [string range $str $i [expr $i + [ expr $t - 1]]]"
                }
}
() 92 % set vv
thisis[]a[1]test
() 93 % set pat
a[1]
() 94 % paramSearch $pat $vv
1

# 5  
Old 01-09-2008
Off by one...
Code:
proc paramSearch {pattern str} {
set t [expr [string length $pattern] - 1]
                for {set i 0} {$i < [string length $str]} {incr i $t} {
                    if {[string compare $pattern [string range $str $i [expr $i + $t]]] == 0} {return 1; #puts "Match at string index: $i"}
                    #puts "Compared $pattern and [string range $str $i [expr $i + $t]]"
                }
}

# 6  
Old 01-09-2008
i would rather use lsearch

i was trying to understand if (and how) that can be done with 'regexp'?

Otherwise,

lsearch -exact $str1 $var1

does the job pretty well.

% set var1 {a[1]}
a[1]
% set var2 {aa[1]}
aa[1]
% set var3 {a[11]}
a[11]
% set str1 {a[1] is the element we are looking for and not aa[1] or a[11]}
a[1] is the element we are looking for and not aa[1] or a[11]

% lsearch -exact $str1 $var1
0
% lsearch -exact $str1 $var2
10
% lsearch -exact $str1 $var3
12
# 7  
Old 01-09-2008
I can't make the regexp code behave as anticipated, thus the workaround.
Worse, the string match code seems fundamentally unhappy with brackets.

I'd approach comp.lang.tcl with this issue and/or check out the tclers wiki and
see if any articles are on point. The Tcler's Wiki
The lsearch idea is a okay but forces an abstraction from one
implicit type to another without solving the underlying problem and
possibly causing others...

Previous Thread | Next Thread
Test Your Knowledge in Computers #396
Difficulty: Medium
HP-UX was the first Unix to offer access control lists for file access permissions as an alternative to the standard Unix permissions system.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

TCL script to delete a pattern(regexp)

Hi I am writing a TCL script to delete a certain in a file My Input file module bist_logic_inst(a, ab , dhd, dhdh , djdj, hdh, djjd, jdj, dhd, dhp, dk ); input a; input ab; input dhd; input djdj; input dhd; output hdh; output djjd; output jdj; output dk; (1 Reply)
Discussion started by: kshitij
1 Replies

2. Shell Programming and Scripting

Special Character issue in Expect Utility (Tcl)

Hi, I have written a unix expect utility "ssh-login.exp" which connects (ssh) to remote host and execute some shell script. I am calling this "ssh-login.exp" utility from another shell script. "ssh-login.exp" takes username, password, host and shell script path to execute on remote host. All... (1 Reply)
Discussion started by: Mahesh Desai
1 Replies

3. Shell Programming and Scripting

Help using regexp in a TCL script ??

In a tcl script I need to find a way of reading a file, and looking for a phrase ("set myvariable") and putting the word following that into a variable. I've used a file open, and a while loop with gets to read each line from the file into a variable, and using regexp searched for the item. I'm... (1 Reply)
Discussion started by: Tonyb61
1 Replies

4. Shell Programming and Scripting

Merging two special character separated files based on pattern matching

Hi. I have 2 files of below format. File1 AA~1~STEVE~3.1~4.1~5.1 AA~2~DANIEL~3.2~4.2~5.2 BB~3~STEVE~3.3~4.3~5.3 BB~4~TIM~3.4~4.4~5.4 File 2 AA~STEVE~AA STEVE WORKS at AUTO COMPANY AA~DANIEL~AA DANIEL IS A ELECTRICIAN BB~STEVE~BB STEVE IS A COOK I want to match 1st and 3rd... (2 Replies)
Discussion started by: crypto87
2 Replies

5. Shell Programming and Scripting

Regexp in tcl

I need to change R3.1.5 as 03015 similarly R4.1.7 as 04017 i need a single command in tcl pls help ---------- Post updated at 05:19 PM ---------- Previous update was at 04:48 PM ---------- i had to do like this without using regexp set old_release "R3.1.5" ... (1 Reply)
Discussion started by: Syed Imran
1 Replies

6. Shell Programming and Scripting

Question on regexp in TCL

I need some help with regexp in tcl. The following code does work if the $urlvar ends in jpg,jpeg,png or gif. Eg, protocol(http/https)://testsite.com/images/image1.jpg if { ! } { //Do something } My problem is that if the URL does not end in these extensions this regexp is of no... (1 Reply)
Discussion started by: ampak
1 Replies

7. Shell Programming and Scripting

Question on TCL regexp and match

Hello everyone, I'm new in tcl scripting. I'm currently studying a tcl script and came across this line: regexp {(\d+)(\S?)} $opts match opt swi According to my understanding, this line means to search in the opts variable for one or more digit, followed by a non-whitespace character... (2 Replies)
Discussion started by: mar85
2 Replies

8. Shell Programming and Scripting

matching regexp

Hi, maybe it is stupid question, but is it possible to match expression like this ? : ... // ... ( there is "//" somewhere on the line and on the end of the line there ISN'T "*/" ) I've tried something like : (in SED) sed 's/\/\/' but I need "*/" not to be on the end of the line ...... (2 Replies)
Discussion started by: kolage
2 Replies

9. Shell Programming and Scripting

perl regexp matching

Hello, I cannot see what's wrong in my code. When I run code below, it just print an empty string. my $test = "SWER~~ERTGSDFGTHAS_RTAWGA_DFAS.x4-234253454.in"; if ($test = ~ m/\~{1,2}.*4/) { print "$1\n"; } else { print "No match...\n"; } Anyone know what I'm doing wrong? ... (4 Replies)
Discussion started by: urandom
4 Replies

10. Shell Programming and Scripting

pattern matching on any special character in Unix

Hi, I have field in a file which would come with any special character, how do i check that field? Eg: @123TYtaasa>>>/ 131dfetr_~2 In the above example, how do I add pattern for any special character on the keyboard. Thanks (3 Replies)
Discussion started by: techmoris
3 Replies

Featured Tech Videos