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

安全な戦略の1つは、単語以外のすべての文字をエスケープすることです。

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 に答える