使用正则表达式在 tcl 中搜索反斜杠
Search backslach in tcl using regexp
如何使用正则表达式在 tcl 中搜索反斜杠“\”。我尝试关注
regexp {\} "b\a"
regexp {\\} "b\a"
我想搜索“.”之间的文本。和 ”\。”。这该怎么做?例如:
abcd.efg\.hij => efg ,为此我尝试了这个:
regexp {\.[a-z]*\.} "abcd.efg\.hij" X
当双引号中使用单反斜杠时,它没有任何特殊意义。应该转义。
% 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
我会使用 \.([^\\.]+)\\.
但这取决于其他可能的样本。
该模式匹配一个转义点 \.
,然后是括号表达式 ([^\\.]+)
,它将提取 efg
(它表示:不是 [^
反斜杠 \
或点 \.
一次或多次 ]+
),然后显式反斜杠 \
和点 \.
.
如果您使用捕获括号表达式,您的模式也将起作用。这样的表达式捕获的匹配将被放入第二个变量:
regexp {\.([a-z]*)\.} {abcd.efg\.hij} matchVar subMatchVar
您还必须考虑到解释器会替换双引号字符串 "abcd.efg\.hij"
中的反斜杠 - 最终字符串将变为 abcd.efg.hij
,有效地阻止您的模式识别它。所以在这里我使用花括号或者可能使用带有该字符串的变量。
看看Visual REGEXP。偶尔用一下。
如何使用正则表达式在 tcl 中搜索反斜杠“\”。我尝试关注
regexp {\} "b\a"
regexp {\\} "b\a"
我想搜索“.”之间的文本。和 ”\。”。这该怎么做?例如: abcd.efg\.hij => efg ,为此我尝试了这个:
regexp {\.[a-z]*\.} "abcd.efg\.hij" X
当双引号中使用单反斜杠时,它没有任何特殊意义。应该转义。
% 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
我会使用 \.([^\\.]+)\\.
但这取决于其他可能的样本。
该模式匹配一个转义点 \.
,然后是括号表达式 ([^\\.]+)
,它将提取 efg
(它表示:不是 [^
反斜杠 \
或点 \.
一次或多次 ]+
),然后显式反斜杠 \
和点 \.
.
如果您使用捕获括号表达式,您的模式也将起作用。这样的表达式捕获的匹配将被放入第二个变量:
regexp {\.([a-z]*)\.} {abcd.efg\.hij} matchVar subMatchVar
您还必须考虑到解释器会替换双引号字符串 "abcd.efg\.hij"
中的反斜杠 - 最终字符串将变为 abcd.efg.hij
,有效地阻止您的模式识别它。所以在这里我使用花括号或者可能使用带有该字符串的变量。
看看Visual REGEXP。偶尔用一下。