我有一个像ED-SNC::SNC0-1-2:101:::RTEOPR=REGROOM,TYPE=DYNAMIC
这样的字符串,我想从中获取TYPE=DYNAMIC
并将其保存在变量中。
我做了set editParam [regexp $line {(?<=,).*$}]
,但收到错误消息:
无法编译正则表达式模式:量词操作数无效 我在这里想念什么?
答案 0 :(得分:2)
Tcl正则表达式引擎不支持lookbehinds(代价高昂),因此它无法解析表达式。
如果您知道有逗号,可以通过以下方式更简单地执行相同的操作
string range $line [string last , $line]+1 end
或
regexp {[^,]+$} $line var
或
regexp {\w+=\w+$} $line var
如果可能没有逗号,并且只想在有逗号的情况下获取字符串,请使用
if {[set idx [string last , $line]] >= 0} {
set var [string range $line $idx+1 end]
}
或
regexp {,([^,]+)$} $line -> var
您在这里得到两个结果:完全匹配进入->
变量,捕获的文本进入变量var
。如果没有匹配项,这些都不会改变。