tcl中[0-9]和\ d之间的差异

Ram*_*Ram 3 regex tcl

我试过了

puts [regexp "(\[0-9]{1,3})\.(\[0-9]{1,3})\.(\[0-9]{1,3})\.(\[0-9]{1,3})" 192.168.1.10]
Run Code Online (Sandbox Code Playgroud)

答案是1。

但是如果我用

puts [regexp "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})" 192.168.1.10]
Run Code Online (Sandbox Code Playgroud)

(替换\[0-9]\d)答案为0。

有人可以告诉我为什么吗?

Din*_*esh 5

您应该逃避的反斜线\d\\d用双引号使用时。

puts [regexp "(\\d{1,3})\.(\\d{1,3})\.(\\d{1,3})\.(\\d{1,3})" 192.168.1.10]
Run Code Online (Sandbox Code Playgroud)

或者,您必须使用大括号。

puts [regexp {(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})} 192.168.1.10]
Run Code Online (Sandbox Code Playgroud)

注意:使用花括号时,不会发生变量替换。