gpt4 book ai didi

regex - 在 Tcl 中实现 "quotemeta"\Q ...\E?

转载 作者:行者123 更新时间:2023-12-04 18:17:09 24 4
gpt4 key购买 nike

典型的用例是当正则表达式需要包含用户输入时。正则表达式中具有特殊含义的字符(即 Perl 中的“脏打”)需要转义。 Perl 提供了“quotemeta”功能来做到这一点:只需将插值变量封装在 \Q 中。和 \E .但是 Tcl 没有提供这样的功能(根据 this page ,即使使用 ARE)。

在 Tcl 中是否有一个好的(严格的)quotemeta 实现?

最佳答案

Perl 的 quotemeta 函数简单地用反斜杠替换每个非单词字符(即,除了 26 个小写字母、26 个大写字母、10 个数字和下划线之外的字符)。这是矫枉过正,因为并非所有非单词字符都是正则表达式元字符,但它简单且安全,因为转义不需要转义的非单词字符是无害的。

我相信这个实现是正确的:

proc quotemeta {str} {
regsub -all -- {[^a-zA-Z0-9_]} $str {\\&} str
return $str
}

但是感谢 glenn 的评论,这个更好,至少对于现代版本的 Tcl ( \W 匹配任何在 Tcl 8.0.5 之后一段时间开始的非单词字符):
proc quotemeta {str} {
regsub -all -- {\W} $str {\\&} str
return $str
}

(我假设 Tcl 的正则表达式与 Perl 的足够相似,因此这将在 Tcl 中完成与在 Perl 中相同的工作。)

关于regex - 在 Tcl 中实现 "quotemeta"\Q ...\E?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11442090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com