人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VB.NETにて正規表現の勉強をしています。

HTMLからTDタグで囲まれた部分を取得しようと思ったのですが、下記のパターンでは TDタグ間に別なタグ(例えば <br>など)があると取得できません。
どうすればよいでしょうか?

<TD[^>]*>(?<1>[^(<TD)]*)</TD>

●質問者: yamazakiis
●カテゴリ:コンピュータ インターネット
✍キーワード:VB.NET タグ パターン 勉強 正規表現
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kn1967
●35ポイント

<TD.*>(.*)</td>

で拾えない?

◎質問者からの返答

グループ化したいんですよねぇ。


2 ● tezcello
●35ポイント

先ずは問題になっている正規表現がどういう事になっているか考えます。


<TD[^>]*>(?<1>[^(<TD)]*)</TD>

<TD[^>]*> <TD に > 以外の文字が0回以上続いた後 > が続いている
(?    ( が0または1回
<1>    必ず <1> が続いている
[^(<TD)]* ( < T D ) 以外の文字が0回以上
)     必ず ) が続いている 
</TD>   必ず </TD> が続いている

という事になると思います。

ひょっとすると、<1> の部分はVB特有の表現なのかも知れませんが、本来の正規表現では質問文にあるやりたい事とは合致しません。

これでTDタグ間に何もタグを含んでいない時にうまくいっているとしたら不思議です。

また、[^(</TD>)]は、</TD>以外の文字列という意味にはなりません。

○○以外の文字列と一致する正規表現はもの凄く難しい(長くなる)です。

こちらが参考になると思います。

http://www.kt.rim.or.jp/~kbk/regex/regex.html#CCLASS

うまくいかないのは、このような理由だと思います。

ですから、基本的に最初の回答者さんので問題無いと思いますけど。

最初の回答者さんのもTDタグの内側がグループ化されているハズですが、ダメなんでしょうか?

何をどうグループしたいのかを示していただければ、適切な回答が得られると思います。

<TD.*>の部分は質問者さんのように<TD[^>]*>の方が厳密でしょうね。

最後の</td>はタイプミスでしょう。

◎質問者からの返答

なるほど、含まないってのは難しいんですね。

参考になりました。

ちなみに、

(? は ( が0または1回 ではありません。


3 ● kn1967
●10ポイント

> (? は ( が0または1回 ではありません。

?の直後に:あるいは=あるいは!が続いていないので0または1回が正解になりますけど、、、、


> [^(<TD)]*</p>

(または<またはTまたはDまたは)の何れか以外という表現になっています。


このように、パラメータ自体におかしな点があるので、元のデータを推測することが出来ません。

1/の回答は大雑把過ぎて済みませんでしたが、上記のような理由で2/の方も理解に苦しんでおられるようですし、他の閲覧しておられる回答者の方々も同じだと思いますので、具体的にどのような元データを準備しておられるのかを書いてみてはいかがでしょうか?

一人二回までなので、もう出てこれませんが、念のため .NETの正規表現のメタキャラクタリストのページを書いておきますので、参考にどうぞ。。。。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ