无法编译正则表达式模式:尝试使用regexp在tcl中子字符串时,限定符操作数无效错误

时间:2018-07-13 18:05:32

标签: regex string tcl

我有一个像ED-SNC::SNC0-1-2:101:::RTEOPR=REGROOM,TYPE=DYNAMIC这样的字符串,我想从中获取TYPE=DYNAMIC并将其保存在变量中。 我做了set editParam [regexp $line {(?<=,).*$}],但收到错误消息:

无法编译正则表达式模式:量词操作数无效 我在这里想念什么?

1 个答案:

答案 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。如果没有匹配项,这些都不会改变。