14/12/30 13:42:30.88 N20A9NEN
すみません、行き詰ってしまったので教えてください。
テキストボックス1にコピペで貼り付けたHTMLファイルの中から
<textarea id="abc">文章1</textarea>を検索して
文章1を取り出し、テキストボックス2に書き出したいのですが上手くいきません。
URLリンク(blogs.wankuma.com)
↑を参考にして
Regex reg1 = new Regex("<textarea id=\"abc\".*>(?<bun>.*)</textarea>");
string html = textBox1.Text;
if (!reg1.IsMatch(html))
{
return;
}
Match match = reg1.Match(html);
textBox2.Text = match.Groups["bun"].Value;
こうやったのですが、nullで検索にマッチしませんでした。
(HTMLの中には確実にそのIDのテキストエリアがあるのに)
どうかお願いします。
68:デフォルトの名無しさん
14/12/30 13:48:49.87 dxBK7ujR
スクレイピングに正規表現使うのが許されるのはリンク抽出まで
Html Agility Packとか使え
69:デフォルトの名無しさん
14/12/30 13:51:22.47 WfP/XooQ
その引数じゃ再現しない
id=の前に何か入っているとかそういうつまらん理由じゃないの
70:デフォルトの名無しさん
14/12/30 13:56:06.53 N20A9NEN
>>68
ごめんなさい、言ってる意味が分からないです。
本当に初心者なんです。
ただ、HTMLの要素として取得しようとしているのではないのです。
あくまで文章が欲しいだけなのです。
>>69
textareaのすぐ後ろにidがあります。間違いありません。
ただ、idの後ろにstyleがごちゃごちゃ入ってます。
<textarea id="abc" style="width:40em@important;">文章1(改行付き)</textarea>
という感じです。
71:デフォルトの名無しさん
14/12/30 13:58:25.05 WfP/XooQ
>>70
そりゃ改行のせいだ
(?<bun>[^>]*)とかに変えてみたら
72:デフォルトの名無しさん
14/12/30 13:59:06.22 w+AR/+6R
俺ならDOMで取り出す
73:デフォルトの名無しさん
14/12/30 14:02:00.64 i/f4ZUzi
RegexOptions.Singleline
74:デフォルトの名無しさん
14/12/30 14:03:10.98 dxBK7ujR
>>70
Webページから情報を抜くのには大きく分けて2つの方法がある
・HTMLソースをプレーンな文字列として扱い、正規表現などで必要なデータを抜く方法
・HTMLの構造(DOM)を論理的に解析してXPathなどで必要なデータを抜く方法
複雑になってくると前者じゃ対応できなくなるので後者を使う
後者なら>>68で言ったようなライブラリを利用してHTMLの解析を行う必要が有る
75:デフォルトの名無しさん
14/12/30 14:10:16.02 w+AR/+6R
仕様変更に強くすることを考えないようじゃ
いつまでたっても初心者
76:74
14/12/30 14:11:32.01 dxBK7ujR
ちなみに、後者のやり方さえ知ってれば単純な場合でも大抵後者の方が早いよ
正規表現が有効なのは、HTMLの構造とは無関係にURLとか時刻とか特定のパターンを抜き出す場合かな
77:デフォルトの名無しさん
14/12/30 14:13:27.86 N20A9NEN
>>71,73
どちらもやってみたのですが駄目でした。やっぱりnullになります。
>>74
ありがとうございます。
私は前者です。
78:デフォルトの名無しさん
14/12/30 14:20:17.29 N20A9NEN
すみません。俄然Html Agility Packに興味が出てきました。
謎を放置するのはよくないとは思うのですが、
Html Agility Packをちょっと調べてみます。
ありがとうございました。
>>ID:WfP/XooQさん本当にありがとうございます。
79:デフォルトの名無しさん
14/12/30 16:15:56.86 N20A9NEN
何度もすみません。
おかげさまでHtml Agility Packであっさり取れました。ありがとうございました。
ところで今回、初めて外部からdllを参照したのですが、
Releaseして作ったexeファイルをよそのPCで使うとき、このdllもそのPCにコピーする
必要があるのでしょうか。
80:デフォルトの名無しさん
14/12/30 23:26:44.33 RTKUjPuf
演算子のオーバーロードって何に使うんですか!?
81:デフォルトの名無しさん
14/12/30 23:57:20.34 8ULPcfoj
1+1=3だと言いはるため
82:デフォルトの名無しさん
14/12/31 00:00:46.64 TRuhXuQQ
>>81
それってオーバーライドじゃね?
83:デフォルトの名無しさん
14/12/31 00:05:40.58 OSM3Gjj+
+より*が優先される
みたいなインチキは普通のメソッドでは出来ないっしょ
84:デフォルトの名無しさん
14/12/31 00:07:33.18 JGm7gXmH
何って、例えば文字列に + が無かったら不便だろ?
"abc" + "def" を
"abc".Append("def") みたいに書かないといけなくなる。
表現したい対象が記号的に書かれているときに
なるべくそれに近い形で記述できるようにするため。数学の行列とかな
85:デフォルトの名無しさん
14/12/31 07:01:52.14 eL28qisr
>>80
たとえば、longなら足せるのにintだと足せないと不便だろ
あるいはクラス同士を+で計算させたいときとか
そう言うときに+演算子をオーバーロードする
86:デフォルトの名無しさん
14/12/31 07:03:24.58 EgsEk8JH
できない言語使ってみればありがたみが分かるよ
87:デフォルトの名無しさん
14/12/31 07:13:24.12 EgsEk8JH
>>79
必要ある
自分のPCで使うとか、仲間内で使うならどうでもいいが
一般に配布するならライブラリのライセンスを必ず読むように
MS-PLだからHtml Agility PackのReadmeをコピーしとくだけでいいと思うが