正規表現で文字列を操作する方法 - TCL regexp関数

このQ&Aのポイント
  • TCLのregexp関数を使って、正規表現を利用して文字列を操作する方法について解説します。
  • 例えば、CSV形式の文字列をカンマで分割し、それぞれの要素を変数に代入する方法などについて説明します。
  • また、操作する文字列のパターンや条件に応じて、適切な正規表現を使ってマッチングさせることが重要です。
回答を見る
  • ベストアンサー

正規表現 TCL regexp関数

regexp関数を用いて正規表現で文字列を操作したいですが、 上手く正規表現でかけなくて困っております。 変数=第一文字列,第二文字列,第三文字列,第四文字列,第五文字列 regexp --{,,,,$} 変数 match A B C D E と実現し、区切った文字をそれぞれA-Eの変数へ代入。 【操作文字列】 ・CSV形式の”,”カンマ4つで5区分に切ります ・第一文字列は先頭の文字は空白以外の[A-Za-z0-9_]途中空白有(\s) ・第二文字列は空(,,) ・第三文字列は数字 ・第四文字列は文字のみ空白なし数字なし ・第五文字列は数字文字混在 このように実現したいのですが、正規表現を見ながら regexp --{\c\w,^\c,\d+,\w+,\c+$} 変数 match A B C D E のようにやったのですが、無理でした

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

見たところ split で十分な気がしますが。 >regexp --{\c\w,^\c,\d+,\w+,\c+$} 変数 match A B C D E \c って?

masato0703
質問者

お礼

参考になりました。ありがとうございます。 正規表現克服します。

masato0703
質問者

補足

ご回答ありがとうございます。 \cは¥sの間違いです。 splitコマンドは返り値は数字でしょうか。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

split が返すのはリストです。 $ tclsh % set x {xxx,yyy,,zzz,123} xxx,yyy,,zzz,123 % echo $x xxx,yyy,,zzz,123 % set y [split $x ","] xxx yyy {} zzz 123 % echo $y "xxx yyy \{} zzz 123" % llength $y 5 % lindex $y 1 yyy % lindex $y 2 % lindex $y 4 123

関連するQ&A

  • Javascriptでの正規表現(RegExp)

    RegExpで「{a|b}」という文字列を「c」に書き換えるための正規表現はどう書けば良いのでしょうか? 雰囲気としては "XXXXXXXXX {a|b} YYYYYYYY".replace(new RegExp(正規表現, 'g'), "c"); → "XXXXXXXXX c YYYYYYYY" というのをやりたいです。 できれば"{a|b}"の部分は間にスペースやタブが入っても良いようにしたいのですが複雑になるなら"{a|b}"だけでも構いません。 よろしくお願いします。

  • 正規表現について

    お世話になります。 ●●● ●●● という文字列かどうか判断する正規表現を作成したいです。 条件としては、 ・「文字1 (←全角スペース)文字2」という感じで、文字1と文字2に全角スペースが挟まれている感じで、文字列の先頭にも末尾にも空白文字は入ってはいけない(真ん中に1つのみ) ・文字1と文字2には、数字・空白以外の文字が入る(主に感じ・ひらがな・カタカナが入る)(文字数は一文字以上) といったところです。 自分で作成した正規表現は、 $pattern = '/^([\d\S])+ ([\d\S])+$/'; if( !preg_match($pattern,$chkStr) ) print "マッチしていない"; } なんですが、どうもマッチしてほしい文字にマッチしていないようなのです。 お手数ですがご教授ください。

    • ベストアンサー
    • PHP
  • 正規表現について

    いま.Netで正規表現にチャレンジしているのですが、どこが問題なのか分からず、投稿させていただきました。 正規表現のパターンです。 \\[Cc]\[(?<$0>[0-9]+),(?<$1>[0-9]+),(?<$2>[0-9]+)\] で、マッチさせたい文字列は、 \C[255,255,255] です。「[255,255,255]」の数字の部分は、一桁から三桁までの数字であれば何でもOKです。 マッチしないことは、http://jsregex.com/を使って調べました。 どうぞよろしくお願いします。

  • 正規表現内に変数を使用する方法

    match() や replace() の第1引数に文字列ではなく正規表現を使用 できますがこの正規表現内に変数を使用する場合、どうやったらよいの でしょうか。 var str = 'てすと'; alert(str.replace(/str/, 'テスト')); とすることができません。 (Perlではパターン内に変数が使用できるのですがJSでは変数が使用 できません) http://ar.aichi-u.ac.jp/blog/js-replace.html に書いてあるように第1引数に文字列を渡すと正規表現ではなくただの 文字とのマッチになってしまうようなので(確認済み)使えません。 面倒ですがリンク先にあるようにnew RegExpでRegExpオブジェクトを 作ってやる方法しかないんでしょうか。

  • 正規表現について

    正規表現について LPIC黒本の問題で1つ困っています。 $ grep -E ^A[^A]A[^A] lpic.txt にマッチする文字列 答え AaAa となっていますが理解できません。 そもそも正規表現ってなんでしょうか? あまり難しいようなら飛ばしますが、 となたか教えてくれるお方おりましたらお願いいたします。

  • 正規表現を教えてください。

    正規表現を教えてください。 C#で正規表現を用いた文字列検索を勉強中なのですが、うまくマッチさせることができません。教えていただけないでしょうか。 検索対象の文字列は下のようになります。 キーワード;値; 文字列中に該当するキーワードが存在する場合に、その値を取得するプログラムを考えています。しかし、私の正規表現では2つ目の「;」を検出してしまい、キーワードのみを取得することが出来ずに困っています。 見当違いの表記をしているとは思うのですがどなたかお助けください。 match = Regex.Match(line, "^(.*);"); C#初心者なものです。

  • ECMAScript:RegExp.exec()メソッドについて

    初めて投稿します。 var re = new RegExp("A", "g"); var res = "ABABAB".match(re); document.writeln(res); 上記のように、文字列に対してString.match()メソッドを使用して正規表現(gフラグつき)とマッチングを行うと結果は 「A,A,A」 とマッチしたAが全て配列として帰ってきますが、 var re = new RegExp("A", "g"); var res = re.exec("ABABAB"); document.writeln(res); 上記のように、文字列に対してregExp.exec()メソッドを使用して正規表現(gフラグつき)とマッチングを行うと結果は 「A」 とマッチしたAが1つしか帰ってきません。 ECMA 262 3rd Editionの仕様では、 (http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/) RegExp.exec()メソッドも、String.match()メソッドと同様に、regExpのオブジェクトを生成時に"g"フラグを付加して、ある文字列とマッチングすると、マッチするものが1件以上存在する場合、新しい配列にマッチしたもの全てを各要素に格納して値を返す動作を行うと(多分?)書かれているみたいなのですが、RegExp.exec()メソッドは、どのブラウザで操作を実行しようとしても、マッチした文字が1件しか帰ってきません。。。 教えていただきたいのは、 『何故、RegExp.exec()メソッドはマッチした文字が1件しか帰ってこないか?』です。 いろんなサイトを調べてみたのですが、どうしてRegExp.exec()メソッドがこのようなふるまいを起こすか断定できませんでした。。。 どなたか、JavaScriptやECMAScriptのロジカル的な部分で詳しい方がいらっしゃいましたら、 よろしくお願いいたします。m(__)m

  • 秀丸エディタの正規表現

    秀丸エディタの正規表現 これから述べる置換処理について教えてください。 条件を表現します。 まず半角空白文字を _ このように全角アンダースコアであらわします。 そしてマッチさせたいSTRINGは _ このように半角空白文字がそれ以外の文字に前後をはさまれている状態ではなくて、 、 __ このように半角空白文字二個もしくは二個以上続いたものが半角空白文字以外に挟まれているパターンです。 。 ちなみに置換後の文字列は __ ですつまり空白半角文字列二個です。 よってこの質問は次のようにも言い換えられます。 。 検索文字列 半角空白文字二個以上 を置換後文字列 半角空白文字二個に置き換える。もしくは、半角空白文字三個以上を 置換後文字列 半角空白文字二個に置き換える。 というのが質問です。おねがいします。 すみませんつけたしです。上記を実現する正規表現を教えてください。

  • 正規表現の初心者です

    正規表現初心者です。 なぜ、 [0-9]+ という正規表現が下記の112にあたらないのでしょうか? 0-9(数字)の一文字以上の繰り返しなので、複数桁の数字にマッチすると思ったのですが・・。 echo 112|grep -e "[0-9]+" > (マッチせず)

  • VBScriptでの正規表現パターンマッチ

    ASPプログラムの中で 文字列のパターンマッチを正規表現で行ないたいと考えています。 英字と数字両方を組み合わせた文字列(英字と記号且つ数字)であることをチェックしたいのですが 以下のようなロジックでは、英字、数字どちらかだけの文字列もマッチしてしまうのではと思います。 ほかによい書き方はありますでしょうか? Dim strTEST TESTCHECK = 0 Dim objRE Set objRE = new RegExp objRE.pattern = "[_\-a-zA-Z0-9]" If (objRE.Test(strTEST) = True) Then Else TESTCHECK = 1 End If Set objRE = Nothing よろしくお願いいたします。

専門家に質問してみよう