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

正規表現で最初に見つかった文字列だけ取得する方法

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

どぼんさんの正規表現を参考にさせていただき、検索して取得することは出来ました。

しかし、For Eachですべて取得するのではなく、最初に見つかった文字列だけ取得したい場合はどうしたらよいでしょうか?

以下のコードだと、 TextBox7.Textに最後に見つかった文字列が入ってしまいます。



'TextBox1.Text内で正規表現と一致する対象をすべて検索
Dim mc2 As System.Text.RegularExpressions.MatchCollection = _
System.Text.RegularExpressions.Regex.Matches( _
html, _
"date=""(?<kenmei>[^""]+)""", _
System.Text.RegularExpressions.RegexOptions.IgnoreCase Or _
System.Text.RegularExpressions.RegexOptions.Singleline)

For Each m2 As System.Text.RegularExpressions.Match In mc2
'正規表現に一致したグループを表示


ListBox4.Items.Add(m2.Groups("kenmei").Value)
TextBox7.Text = (m2.Groups("kenmei").Value)

Next
こんばんは。

一括処理して複数結果をコレクションに受け取りループで処理をしているのですから、当たり前です。
ひとつだけでよいのなら、
System.Text.RegularExpressions.Regex.Matchesメソッドでの一括処理ではなく
System.Text.RegularExpressions.Regex.Matchメソッド自体を単一実行して、
受け取ったマッチオブジェクト(System.Text.RegularExpressions.Matchクラス)を使用して代入処理をするように記述してください。
(なお、Matchメソッドは例外さえ発生しなければ成否に関わらず必ずマッチオブジェクトを返しますので、
そのオブジェクトの.Successプロパティの状態確認を忘れないでください。)

※マニュアルにて、System.Text.RegularExpressions.Regex配下すべてのメソッドくらいはまず参照されるべきだと思います。
大したメソッド数はない上に、正規表現関連は処理の幅として規模が大きいためかどれの中もかなり丁寧に書かれています。
とんさんありがとうございます。

今週末に助言していただいた方法でやってみたいと思います。

有難うございました。

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