DOBON.NET DOBON.NETプログラミング掲示板過去ログ

正規表現のパターン

環境/言語:[VB.NET]
分類:[.NET]

Kazといいます。

VB.NETにて、正規表現を使用したいと思っています。

Regexを使用するのはわかったのですが、パターンの
表記がいまいちわかりません。

例えば、

"abcd :b1:,:b2:,:efgh: xxxx"

という文字列があり、ここから
":"から":"までの文字を取得したいのです。
パターンを":(.)+:"とすると、":b1:,:b2:,:efgh:"と全部取得して
しまうのです。
":b1:"、":b2:"、":efgh:"のように、別々に取りたいのですが、
どのような表記をしたらよいでしょうか。
よい方法をご存知の方、よろしくお願いいたします。
■No6797に返信(java.lang.Nullpoさんの記事)
> ■No6789に返信(Kazさんの記事)
>>":b1:"、":b2:"、":efgh:"のように、別々に取りたいのですが、
>
> えっと、別の方法を使うべきだと思うのですが...

そうですか…。別の方法(Splitあたりでしょうか)でやってみます。
これは、正規表現を使うべきでないパターンということですか?
それとも、正規表現でもできるけれど、他の方法でやったほうが
簡単ということでしょうか?
■No6799に返信(Kazさんの記事)
> >>":b1:"、":b2:"、":efgh:"のように、別々に取りたいのですが、
> これは、正規表現を使うべきでないパターンということですか?
> それとも、正規表現でもできるけれど、他の方法でやったほうが
> 簡単ということでしょうか?

MicrosoftのHPと、下記URLのページを見てみましたが、
http://www.kt.rim.or.jp/~kbk/regex/regex.html
そのように取得できる方法はないような気がします。

とはいえ、正規表現には詳しくないので、
もしかしたら出来るかもしれませんが・・・
■No6799に返信(Kazさんの記事)
> そうですか…。別の方法(Splitあたりでしょうか)でやってみます。
> これは、正規表現を使うべきでないパターンということですか?
> それとも、正規表現でもできるけれど、他の方法でやったほうが
> 簡単ということでしょうか?

まず、記事を削除してしまったことについて。
「もしかしてできるかも」と思って消しました。
で、しばらく試してから、再投稿しようかと思ったのですが、
どうやら、先にレスされちゃいましたね(^_^;)

さて、最初と最後に「:」があるので、どうしても大外で取ってきてしまいますね...。
# 関係ない話ですが、何故「()グループ化」を使っているのでしょうか?

「:」をカンマのように使っている(最初と最後にない使い方)点からして、
Splitでやった方がスマートだと思って投稿したのですが...

もしかしたら、やり方があるのかも... 「間に含まない」を検索しても今回の例では...
Kazさんの正規表現パターンが正しいかどうかは別として、問題は、最長マッチと最短マッチの違いということではないでしょうか。ただの"+"では最長マッチになりますので、":(.)+?:"として最短マッチにするか、"."の代わりに"[^:]"としてみてはいかがでしょうか。
2004/10/19(Tue) 20:33:22 編集(投稿者)

みなさん、どうもありがとうございます。
なにぶん、正規表現について良くわかっていない為、
java.lang.Nullpoさんの
># 関係ない話ですが、何故「()グループ化」を使っているのでしょうか?
との問いに関しましても、こんな感じでできないかな?と言ったレベルで
試行錯誤していたため、明確な理由はないんです。。。

管理人さんの最短マッチの方法を使えばどうやらできそうです。

どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板