2

Expect用作测试框架并编写一些辅助函数来简化expect命令匹配模式的键入。

因此,我寻找将任何字符串转换为字符串的函数,其中所有特殊的正则表达式语法都已转义(如*|、和其他字符) +[因此我可以将任何字符串放入正则表达式,而不必担心我会破坏正则表达式:

expect -re "^error: [escape $str](.*)\\."
refex "^error: [escape $str](.*)\\."  "lookup string..."

因为expect -ex编写expect -gl转义函数非常容易。但是expect -re因为我是 TCL 的新手,所以很难......

PS我写了这段代码,目前正在测试它们:

proc reEscape {str} {
    return [string map {
        "]" "\\]" "[" "\\[" "{" "\\{" "}" "\\}"
        "$" "\\$" "^" "\\^"
        "?" "\\?" "+" "\\+" "*" "\\*"
        "(" "\\(" ")" "\\)" "|" "\\|" "\\" "\\\\"
    } $str]
}

puts [reEscape {[]*+?\n{}}]
4

1 回答 1

7

一种安全的策略是转义所有非单词字符:

proc reEscape {str} {
    regsub -all {\W} $str {\\&}
}

&被表达式中匹配的任何内容替换。

例子

% set str {^this is (a string)+? with REGEX* |metacharacters$}
^this is (a string)+? with REGEX* |metacharacters$

% set escaped [reEscape $str]
\^this\ is\ \(a\ string\)\+\?\ with\ REGEX\*\ \|metacharacters\$
于 2013-02-23T18:05:33.937 回答