我在 tcl 8.0 版本中运行此功能。

proc test {} {
    set owner 212549316
    set val [regexp {[0-9]{9}} $owner]
    puts $val
}

tcl 8.6 中的相同代码,输出是 1 但在 tcl 8.0 中它是 0
我正在检查字符串是否只包含 tcl 8.0 中的 9 位数字。

任何有关如何使其在 tcl 8.0 版本中工作的帮助。

最佳答案

在 Tcl 8.0 中,绑定(bind)(或限制)量词 are not supported

要匹配 Tcl 8.0 中的 9 位数字,您必须重复 [0-9] 9 次:

set val [regexp {[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]} $owner]

从 Tcl 8.1 开始,随着高级正则表达式语法的引入,支持绑定(bind)量词。

Tcl 8.0 中可用的基本正则表达式语法仅包括:
.    Matches any character.
*    Matches zero or more instances of the previous pattern item.
+    Matches one or more instances of the previous pattern item.
?    Matches zero or one instances of the previous pattern item.
( )  Groups a subpattern. The repetition and alternation operators apply to the preceding subpattern.
|    Alternation.
[ ]  Delimit a set of characters. Ranges are specified as [x-y]. If the first character in the set is ^, then there is a match if the remaining characters in the set are not present.
^    Anchor the pattern to the beginning of the string. Only when first.
$    Anchor the pattern to the end of the string. Only when last.

Practical Programming in Tcl and Tk, 3rd Ed.© 1999, Brent Welch, Ch 11, p. 146

关于regex - 不同版本的tcl给出不同的答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37522605/

10-13 05:23