HTMLからTDタグで囲まれた部分を取得しようと思ったのですが、下記のパターンでは TDタグ間に別なタグ(例えば <br>など)があると取得できません。
どうすればよいでしょうか?
<TD[^>]*>(?<1>[^(<TD)]*)</TD>
先ずは問題になっている正規表現がどういう事になっているか考えます。
<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回 ではありません。
> (? は ( が0または1回 ではありません。
?の直後に:あるいは=あるいは!が続いていないので0または1回が正解になりますけど、、、、
> [^(<TD)]*</p>
(または<またはTまたはDまたは)の何れか以外という表現になっています。
このように、パラメータ自体におかしな点があるので、元のデータを推測することが出来ません。
1/の回答は大雑把過ぎて済みませんでしたが、上記のような理由で2/の方も理解に苦しんでおられるようですし、他の閲覧しておられる回答者の方々も同じだと思いますので、具体的にどのような元データを準備しておられるのかを書いてみてはいかがでしょうか?
一人二回までなので、もう出てこれませんが、念のため .NETの正規表現のメタキャラクタリストのページを書いておきますので、参考にどうぞ。。。。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...
グループ化したいんですよねぇ。