TCL 中的反向引用有问题
Having issue with back reference in TCL
我有以下代码:
set a "10.20.30.40"
regsub -all {.([0-9]+).([0-9]+).} $a { } b
我正在尝试 grep IP 地址的第二个和第三个八位字节。
预期输出:
20 30
实际输出:
20 04 0
我这里的错误是什么?
您需要为匹配组和捕获组设置变量,然后才能访问它们。这是一个例子:
set a "10.20.30.40"
set rest [regexp {[0-9]+\.([0-9]+)\.([0-9]+)\.[0-9]+} $a match submatch1 submatch2]
puts $submatch1
puts $submatch2
的输出
20
30
编辑:
你可以这样使用regsub和backerferences(我现在替换第3个和第2个八位字节,只是为了演示)。请注意,文字点必须转义:
set a "10.20.30.40"
regsub -all {\.([0-9]+)\.([0-9]+)\.} $a {...} b
puts $b
demo 的输出:
10.30.20.40
要获取“20 30”字符串,需要使用
regsub -all {^[0-9]+\.([0-9]+)\.([0-9]+)\.[0-9]+$} $a { } b
我会完全远离正则表达式:
set b [join [lrange [split $a .] 1 2]]
在点上拆分值,取第 2 个和第 3 个元素,并用 space 连接它们。
我有以下代码:
set a "10.20.30.40"
regsub -all {.([0-9]+).([0-9]+).} $a { } b
我正在尝试 grep IP 地址的第二个和第三个八位字节。
预期输出:
20 30
实际输出:
20 04 0
我这里的错误是什么?
您需要为匹配组和捕获组设置变量,然后才能访问它们。这是一个例子:
set a "10.20.30.40"
set rest [regexp {[0-9]+\.([0-9]+)\.([0-9]+)\.[0-9]+} $a match submatch1 submatch2]
puts $submatch1
puts $submatch2
的输出
20
30
编辑:
你可以这样使用regsub和backerferences(我现在替换第3个和第2个八位字节,只是为了演示)。请注意,文字点必须转义:
set a "10.20.30.40"
regsub -all {\.([0-9]+)\.([0-9]+)\.} $a {...} b
puts $b
demo 的输出:
10.30.20.40
要获取“20 30”字符串,需要使用
regsub -all {^[0-9]+\.([0-9]+)\.([0-9]+)\.[0-9]+$} $a { } b
我会完全远离正则表达式:
set b [join [lrange [split $a .] 1 2]]
在点上拆分值,取第 2 个和第 3 个元素,并用 space 连接它们。