awk:从字符串中转义正则表达式运算符的函数
awk: function to escape regex operators from a string
需要一个函数来转义包含 awk 脚本中正则表达式运算符的字符串。
我遇到了这个 'ugly' 解决方案:
function escape_string( str )
{
gsub( /\/, "\\", str );
gsub( /\./, "\.", str );
gsub( /\^/, "\^", str );
gsub( /$/, "\$", str );
gsub( /\*/, "\*", str );
gsub( /\+/, "\+", str );
gsub( /\?/, "\?", str );
gsub( /\(/, "\(", str );
gsub( /\)/, "\)", str );
gsub( /\[/, "\[", str );
gsub( /\]/, "\]", str );
gsub( /\{/, "\{", str );
gsub( /\}/, "\}", str );
gsub( /\|/, "\|", str );
return str;
}
有更好的主意吗?
您可以使用 个字符 class 来使用单个 gsub
,如下所示:
function escape_string( str ) {
gsub(/[\.^$(){}\[\]|*+?]/, "\\&", str)
}
&
是对匹配字符串的反向引用,\\
用于转义匹配。
需要一个函数来转义包含 awk 脚本中正则表达式运算符的字符串。
我遇到了这个 'ugly' 解决方案:
function escape_string( str )
{
gsub( /\/, "\\", str );
gsub( /\./, "\.", str );
gsub( /\^/, "\^", str );
gsub( /$/, "\$", str );
gsub( /\*/, "\*", str );
gsub( /\+/, "\+", str );
gsub( /\?/, "\?", str );
gsub( /\(/, "\(", str );
gsub( /\)/, "\)", str );
gsub( /\[/, "\[", str );
gsub( /\]/, "\]", str );
gsub( /\{/, "\{", str );
gsub( /\}/, "\}", str );
gsub( /\|/, "\|", str );
return str;
}
有更好的主意吗?
您可以使用 个字符 class 来使用单个 gsub
,如下所示:
function escape_string( str ) {
gsub(/[\.^$(){}\[\]|*+?]/, "\\&", str)
}
&
是对匹配字符串的反向引用,\\
用于转义匹配。