带有正则表达式的其他文件

时间:2018-08-07 15:16:10

标签: regex tcl

我有很多tcl脚本和所有相同的regexp条目。

regexp一个示例:

if {[regexp -nocase {outl} $cat]} { set cat "outlook" }

如何将我所有的正则表达式插入文件中并在proc中加载?

示例:

proc pub:mapping {nick host handle channel text} {

set cat [lindex [split $text] 1];

#regexp i want hier load the file for regexp
if {[regexp -nocase {outl} $cat]} { set cat "outlook" }

putnow "PRIVMSG $channel :new $cat"
}

致谢

2 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您现在有一堆Tcl脚本,其中大部分代码被重复(在您的情况下,各种正则表达式比较)。在这种情况下,将代码提取到一个单独的单元中很有意义。

正如您所建议的那样,这可能成为一种文本文件,您可以在其中以某种格式列出正则表达式及其结果,然后在需要时在Tcl脚本中加载它们。但是我觉得这太复杂而且笨拙。

可能我建议您仅创建一个正则表达式检查proc并将其保存到.tcl文件中。如果您需要在其他任何脚本中进行正则表达式检查,则可以简单地获取该文件并提供可用的proc。

根据您的问题,我不太确定您打算如何使用这些正则表达式比较,但是也许这个示例可以有所帮助:

# This is in regexfilter.tcl
proc regexfilter {text} {
    if {[regexp -nocase {outl} $text]} { return "Outlook" }
    if {[regexp -nocase {exce} $text]} { return "Excel" }
    if {[regexp -nocase {foo} $text]} { return "Bar" }
    # You can have as many options here as you like.
    # In fact, you should consider changing all this into a switch - case
    # The main thing is to have all your filters in one place and
    # no code duplication 
}

#
# This can then be in other Tcl scripts
#

source /path_to_filter_scipt/regexfilter.tcl

proc pub:mapping {nick host handle channel text} {
    set cat [lindex [split $text] 1]
    set cat [regexfilter $cat]
    putnow "PRIVMSG $channel :new $cat"
}

答案 1 :(得分:0)

如果您只想扩展缩写词,则可以使用string map

proc expand_abbreviations {string} {
    # this is an even-numbered list mapping the abbreviation to the expansion
    set abbreviations {
        outl    outlook
        foo     foobar
        ms      Microsoft
    }
    return [string map $abbreviations $string]
}

这种方法将很快。但是,如果字符串已经包含“ outlook”,则它将变成“ outlookook”