簡體   English   中英

Tcl正則表達式字符串匹配

[英]Tcl regular expression string matching

我有一個像這樣的字符串列表:

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

我究竟做錯了什么?

你實際上做了幾件事。

  1. 你有一個名為$mystring的字符串,但你在函數中使用$myString

  2. regexp的語法是:

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

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

現在,為了使一切更清潔,您可以使用:

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

鍵盤演示

您不需要轉義正斜杠,如果您的正則表達式中沒有包含大小寫的字符,則不需要-nocase標志。

整個匹配存儲在名為->的變量和match的第一個子match

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

% 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM