使用regexp在tcl中搜索backslach

时间:2015-10-28 06:42:45

标签: tcl regexp-replace

如何搜索反斜杠" \"在tcl中使用regexp。我试过跟着

regexp {\\} "b\a"
regexp {\\\\} "b\a"

我想在"。"之间搜索文字。和" \。"。这该怎么做?例如: abcd.efg \ .hij => efg,为此我尝试了这个:

regexp {\.[a-z]*\\.} "abcd.efg\.hij" X

2 个答案:

答案 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。我偶尔会用它。