【发布时间】:2017-05-17 21:36:46
【问题描述】:
编辑: 对于给定的 str 参数,我试图用“xor_in[0]”替换“xor_in0”,用“xor_in[1]”替换“xor_in1”。这里“xor_in0”、“xor_in1”是传入的参数,我将其表示为“key”,而“xor_in[0]”、“xor_in[1]”是存储在数组中的值参数。注意这里的重点是将 "str" 中的每个 "key" 替换为 "value" 。这是我的测试代码:
set str "(xor_in0^xor_in1)"
set str1 "xor_in0^xor_in1" # another input
set key "xor_in0"
set value "xor_in\[0\]"
set newstr ""
set nonalpha "\[^0-9a-zA-Z\]"
regsub -all [subst {^\[(*\]($key)($nonalpha+)}] $str [subst -nobackslashes {$value\2}] newstr
puts $newstr
但不知何故,它不起作用...我也尝试删除 [subst ...],但它仍然无法匹配任何内容。这在某种程度上违背了我对正则表达式的了解。请帮忙。
【问题讨论】:
-
首先要检查:输入 regsub 的字符串是否符合您的实际期望?
-
你的意思是 $str 还是 [subst ...]? $str 是正确的。但是 [subst ...] 会让事情变得复杂,我怀疑会有一些问题。但我不知道如何调试它。我需要 subst 来评估传递给函数的参数。
-
我认为问题在于 [subst] 和 {} 一起使用。如果我不使用 {},而是使用“”,它会起作用:regsub -all "[subst $key]" $str [subst {$value}] newstr。但这不是我想要的……我需要匹配“^”符号和()来保留剩余的……