- ベストアンサー
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
- みんなの回答 (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)
VB はよくわからんけど、while ループの中で毎回 reg.Match() を呼び出しているからではないですか? これだと「毎回先頭から検索」することになるのではないでしょうか。