Tcl正则表达式字符串匹配

时间:2014-04-08 22:45:12

标签: regex tcl

我有一个像这样的字符串列表:

A/B/C/P/E

我想使用正则表达式来捕获

A/B/C/P

并忽略尾随/E

我尝试使用:

set mystring {A/B/C/P/E}
regex -nocase -- {(.*)\/\S+} $myString match
puts $match

puts $match 

打印

A/B/C/P/E

我做错了什么?

2 个答案:

答案 0 :(得分:2)

你实际上做了几件事。

  1. 您有一个名为$mystring的字符串,但您在函数中使用$myString

  2. regexp的语法是:

    regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?
    

    所以如果你想要子匹配,你需要使用另一个变量。

  3. 现在,为了让一切更清洁,你可以使用:

    set myString {A/B/C/P/E}
    regexp -- {(.*)/\S+} $myString -> match
    puts $match
    # => A/B/C/P
    

    codepad demo

    您不需要转义正斜杠,如果您的正则表达式中没有包含大小写的字符,则不需要-nocase标记。

    整个匹配存储在名为->的变量和match中的第一个子匹配中。

答案 1 :(得分:0)

替代方法:拆分字符串,除了最后一个元素之外,重新加入列表:

% set mystring {A/B/C/P/E}
A/B/C/P/E
% set new [join [lrange [split $mystring /] 0 end-1] /]
A/B/C/P