如何搜索反斜杠" \"在tcl中使用regexp。我试过跟着
regexp {\\} "b\a"
regexp {\\\\} "b\a"
我想在"。"之间搜索文字。和" \。"。这该怎么做?例如: abcd.efg \ .hij => efg,为此我尝试了这个:
regexp {\.[a-z]*\\.} "abcd.efg\.hij" X
答案 0 :(得分:3)
当双引号中使用单反斜杠时,它根本没有特殊含义。应该逃脱。
% set input "abcd.efg\.hij"; # Check the return value, it does not have backslash in it
abcd.efg.hij
%
% set user "din\esh"; # Check the return value
dinesh
%
% set input "abcd.efg\\.hij"; # Escaped the backslash. Check the return value
abcd.efg\.hij
%
% set input {abcd.efg\.hij}; # Or you have to brace the string
abcd.efg\.hij
%
因此,您的正则表达式应该更新为,
% regexp "\\\\" "b\\a"
1
% regexp {\\} "b\\a"
1
% regexp {\\} {b\a}
1
% regexp {\\} {b\\a}
1
%
要提取所需数据,
% set input {abcd.efg\.hij}
abcd.efg\.hij
% regexp {\.(.*)?\\} $input ignore match
1
% set match
efg
答案 1 :(得分:1)
我会使用\.([^\\\.]+)\\\.
,但这取决于其他可能的样本。
该模式匹配转义点\.
,然后是带括号的([^\\\.]+)
,它将提取efg
(它表示:不是[^
反斜杠\\
或点{ {1}}一次或多次\.
),然后使用明确的反斜杠]+
和点\\
。
如果您将使用捕获带括号的表达式,您的模式也将起作用。由这样的表达式捕获的匹配将被放入第二个变量:
\.
您还必须考虑到双引号字符串regexp {\.([a-z]*)\\.} {abcd.efg\.hij} matchVar subMatchVar
中的反斜杠被解释器替换 - 最终字符串将变为"abcd.efg\.hij"
,从而有效地阻止您的模式识别它。所以我在这里使用花括号或者可以使用带有该字符串的变量。
看看Visual REGEXP。我偶尔会用它。