2
我使用Expect
作为测试框架并编写一些辅助函数来简化expect
命令的匹配模式的输入。将字符串放入TCL的正则表达式中
所以我寻找那些将任何字符串转换成字符串,其中所有特殊的正则表达式的语法逃脱(如*
,|
,+
,[
和其他字符)功能,这样我就可以把任何字符串转换成正则表达式,而不必担心我打破正则表达式:
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{}}]
谢谢!我在tcl wiki上看过这个,但不明白这个技巧。 +1 – gavenkoa 2013-02-23 18:40:06
我找不到原始链接,但这有帮助http://wiki.tcl.tk/989(正则表达式示例)。 – gavenkoa 2013-02-23 18:43:09
@gavenkoa你不了解它吗?我们很乐意帮助您理解。 (虽然可以更好地完成自己的问题,以便其他人更容易搜索,但只要它们不同,就可以提出多个问题 - 在Stack Overflow中绝对可以。) – 2013-02-24 13:20:26