• ベストアンサー

VB.NETの正規表現の検索を教えてください。

VB.NETの正規表現で文章中(HTMLソース)から番号を抜き取りたいのですが、 先頭の1つだけしか見つけられません。 htmlソース内に 番号:10000 番号:20000 番号:30000 番号:40000 という文字があるので、その後半の10000や20000を取得したいです。 下記のコードで実行すると、10000が4つ出力されてしまいます。 良い方法をご教示頂きたいです。よろしくお願いいたします。 Dim pagedata As String  <---htmlソース Dim reg As Regex reg = New Regex("番号:(?<datano>.+)", RegexOptions.Compiled) Dim DataNo As String m = reg.Match(pagedata) While m.Success = True DataNo = reg.Match(pagedata).Result("${datano}") m = m.NextMatch() Console.WriteLine(DataNo) End While

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

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

毎回最初の一つしか出てこないというのは#1の方の回答の通りです。 質問にあるプログラム片では mが宣言されていないと思うのですが、 mをMatch型のオブジェクトと宣言したうえで、mに対してNextMatchメソッドの呼び出しを行ってください。 Match.NextMatch メソッド (System.Text.RegularExpressions) http://msdn2.microsoft.com/ja-jp/library/system.text.regularexpressions.match.nextmatch(VS.80).aspx あるいはmをMatchCollectionとして宣言し、また、 reg.Matchを reg.Matchesに 変更した上で列挙するかしてください。 Regex.Match メソッド (String) (System.Text.RegularExpressions) http://msdn2.microsoft.com/ja-jp/library/twcw2f1c(VS.80).aspx Regex.Matches メソッド (String) (System.Text.RegularExpressions) http://msdn2.microsoft.com/ja-jp/library/e7sf90t3(VS.80).aspx

その他の回答 (1)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

VB はよくわからんけど、while ループの中で毎回 reg.Match() を呼び出しているからではないですか? これだと「毎回先頭から検索」することになるのではないでしょうか。

関連するQ&A