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