TCL中带单词边界的regexp匹配不符合预期问题求助
解决TCL 8.3中纯数字字符串的正则匹配问题
问题分析
你当前用的\m\d+\M正则是匹配单词边界内的数字,而连字符-属于非单词字符,所以6-7里的6会被当成独立的数字单词(开头是字符串起始的单词边界\m,结尾是-前的单词边界\M),导致误匹配。你实际需要的是匹配整个字符串全为数字,而非字符串内的数字片段。
解决方案
在TCL 8.3的正则规则里,用^(字符串起始锚点)和$(字符串结束锚点)限定整个字符串范围,把正则表达式改成^\d+$,这样只有当字符串从开头到结尾全部是数字时,才会匹配成功。
修改后的代码如下:
set variable1 "5" set variable2 "6-7" if {[regexp {^\d+$} $variable1 matchall]} { puts "only a number has been provided and that is $matchall" } if {[regexp {^\d+$} $variable2 matchall]} { puts "only a number has been provided and that is $matchall" }
运行结果
执行上述代码后,只会输出:
only a number has been provided and that is 5
内容的提问来源于stack exchange,提问作者Mario Jost
相关产品推荐
相关产品推荐

