Construct a regular expression, so it matches exactly what you want.
Look at this example code
Code:
[COLOR=#804040][b]set[/b][/color] line [COLOR=#ff00ff]"Par123 sas dasda asdas"[/color]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"[/color][COLOR=#6a5acd]\$[/color][COLOR=#ff00ff]line='$line'[/color][COLOR=#6a5acd]\n[/color][COLOR=#ff00ff]"[/color]
[COLOR=#804040][b]set[/b][/color] result [[COLOR=#804040][b]regexp[/b][/color] {^(Par\d+)[^\d]+$} [COLOR=#008080]$line[/color] match fname]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"Matching Result=$result"[/color]
[COLOR=#804040][b]if[/b][/color] {[COLOR=#008080]$result[/color]} {
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"This was matched: '$match'"[/color]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"Extracted [/color][COLOR=#6a5acd]\$[/color][COLOR=#ff00ff]fname: '$fname'"[/color]
}
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"[/color][COLOR=#6a5acd]\n[/color][COLOR=#ff00ff]"[/color]
[COLOR=#804040][b]set[/b][/color] result [[COLOR=#804040][b]regexp[/b][/color] {^(Par\d+)$} [COLOR=#008080]$line[/color] match fname]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"Matching Result=$result"[/color]
[COLOR=#804040][b]if[/b][/color] {[COLOR=#008080]$result[/color]} {
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"This was matched: '$match'"[/color]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"Extracted [/color][COLOR=#6a5acd]\$[/color][COLOR=#ff00ff]fname: '$fname'"[/color]
}
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"[/color][COLOR=#6a5acd]\n[/color][COLOR=#ff00ff]-------------------------------------------------"[/color]
[COLOR=#804040][b]set[/b][/color] line [COLOR=#ff00ff]"Par123"[/color]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"[/color][COLOR=#6a5acd]\$[/color][COLOR=#ff00ff]line='$line'[/color][COLOR=#6a5acd]\n[/color][COLOR=#ff00ff]"[/color]
[COLOR=#804040][b]set[/b][/color] result [[COLOR=#804040][b]regexp[/b][/color] {^(Par\d+)[^\d]+$} [COLOR=#008080]$line[/color] match fname]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"Matching Result=$result"[/color]
[COLOR=#804040][b]if[/b][/color] {[COLOR=#008080]$result[/color]} {
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"This was matched: '$match'"[/color]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"Extracted [/color][COLOR=#6a5acd]\$[/color][COLOR=#ff00ff]fname: '$fname'"[/color]
}
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"[/color][COLOR=#6a5acd]\n[/color][COLOR=#ff00ff]"[/color]
[COLOR=#804040][b]set[/b][/color] result [[COLOR=#804040][b]regexp[/b][/color] {^(Par\d+)$} [COLOR=#008080]$line[/color] match fname]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"Matching Result=$result"[/color]
[COLOR=#804040][b]if[/b][/color] {[COLOR=#008080]$result[/color]} {
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"This was matched: '$match'"[/color]
[COLOR=#804040][b]puts[/b][/color] [COLOR=#ff00ff]"Extracted [/color][COLOR=#6a5acd]\$[/color][COLOR=#ff00ff]fname: '$fname'"[/color]
}
The result is
Code:
D:\>tclsh85 regexp3.tcl
$line='Par123 sas dasda asdas'
Matching Result=1
This was matched: 'Par123 sas dasda asdas'
Extracted $fname: 'Par123'
Matching Result=0
-------------------------------------------------
$line='Par123'
Matching Result=0
Matching Result=1
This was matched: 'Par123'
Extracted $fname: 'Par123'
I use 2 regular expression
First
matches from beginning of the line (
^) to the end of line (
$) a pattern which consists of
Par followed by minimal one digit (
\d+) and minimal one "not digit" character (
[^\d]+). Thereby the subpattern closed in
( and
), i.e
Par\d+ will be extracted.
So as you see this regex matches
$line='Par123 sas dasda asdas'
but it doesn't match
$line='Par123'
Second regex is
It matches from beginning of the line (
^) to the end of line (
$) only the pattern which consists of
Par followed by minimal one digit (
\d+). Thereby the subpattern closed in
( and
), i.e
Par\d+ will be extracted.
So this regex doesn't match
$line='Par123 sas dasda asdas'
but it matches
$line='Par123'
only