2011-07-30 1 views
1

Tclの文字列に文字が含まれているかどうかを簡単に調べる必要があります。 私の考えは正規表現でこれを行うことです。TCLで1つ以上の文字が正規表現の文字列にあることを理解する方法

私の文字列は、 "word_word-word_word_word-word"または "word.word.word.word-word"のようになります。 私の問題は、時々私は._-を含む文字列を取得し、私はそれを処理する別の手順を呼び出す必要があります。

は今の質問は、再び、それを把握するためにどのように文字列は、文字列が含まれている場合は、「_-_-」またはあなただけ見て探している場合_.-

答えて

5

間の任意の言葉で「...-」が含まれていることそのために_-_-間の任意のランダムなジャンクで、我々は、2つの方法(あなたが他の区切り文字を置き換えることができますが、.は正規表現で特別な処理を必要とする。[.]または\.のどちらかが行います)ことを行うことができます:

regexp {_.+-.+_.+-} $stringToMatchAgainst 
string match {*_*-*_*-*} $stringToMatchAgainst 

OK、技術的に(グロブマッチングである)最後のものがわずかに異なる何かを一致しますが、効果は同じです。

しかし、私はあなたが本当に探しているものであるかどうかはわかりません。あなたは本当にwordの後になっていると思いますか?おそらくセパレータもあります。単語のリストを取得するには

、我々は多少異なる技術(つまり、それが識別子に共通だからだけでなく、下線一致するよう\wを使用することはできません)を使用する:あなたは後にしている場合は

set wordList [regexp -all -inline {[a-zA-Z0-9]+} $stringToMatchAgainst] 

をあまりにセパレータは、最も簡単な方法はTcllibからtextutil::split::splitxを使用することです:

package require textutil::split 
set tokenList [textutil::split::splitx $stringToMatchAgainst {([-_.])} ] 

最後のケースでは、word_word-word_word_word-wordの入力文字列で、この出力を与える:

word _ word - word _ word _ word - word 
+0

あなたの完璧な答えをありがとう、それはまさに私が探しているものです。 – Chris

関連する問題