2016-08-15 3 views
1

は、私のような正規表現のコマンドを使用するようにしてください。正規表現の出力で角括弧を処理する方法は?</p> <pre><code>IN: regexp -all -inline {S+} "RR[0] in" OUT:{RR[0]} in </code></pre> <p>しかし、文字列に括弧がない場合、出力形式が異なります。

IN: regexp -all -inline {\S+} "RR in" 
OUT:RR in 

なぜ最初の要素が中かっこの間にあるのですか?

+0

あなたは角括弧またはあなたが最初のコマンドによって返されたリストに表示中括弧について尋ねていますか? – Mariano

+0

申し訳ありません。私はなぜ最初の要素が中括弧を必要とするのか最初のケースで尋ねていますか? –

答えて

2

大括弧はtclでコマンドを実行するために予約されている問題です。

だから、それが見つかったすべての角括弧を評価し、で区切られたものの内部の文字列が含まれています。

だから、それがコマンドを含むと解釈される文字列を保護するためにカーリングブラケットを置く一致する正規表現を返すとき。

はそれさえも、結果は文字列であり続ける

たとえば、あなたがしなければその:。

% set r [regexp -all -inline {\S+} "RR\[0\] in"] 
{RR[0]} in 

そして、あなたはループから印刷:では

% foreach x $r { puts $x } 
RR[0] 
in 

はあなたが必要なときに簡単にトリム機能と括弧を削除するには避けて、文字列にリストの任意の種類を変換することができコマンドに参加します。

% puts [join $r ] 
RR[0] in 

または要素への直接:

% puts [join [lindex $r 0] ] 
RR[0] 
0

まず、regexpをそのまま実行するとエラーが発生します。正方形のbarcketsがコマンドとして解釈されているので、あなたが代入をしないようにTCL伝える必要がある場合、あなたは、検索文字列の周りにカッコ付き

regexp -all -inline {\S+} {RR[0] in} 

、それを伝えるための方法の一つである:それはする必要があります中括弧を使用します。

括弧が存在しない場合、正規表現はそれらを見つけられません。

+0

ありがとうございます。実際には、最初のケースでは "RR \ [0 \] in"を意味します。最初の要素に中括弧が必要なのはなぜですか –

関連する問題