952 :
その@:2012/06/20(水) 18:31:30.82
正規表現について質問です。
↓こーいう文字列に対してC#で正規表現を掛けようと思っています。(実際には改行コードは含まれていません。)
<li class="g"><div class="vsc" sig="jNt" bved="0CDUQkQo" pved="0CDQQkgowBQ">
<h3 class="r"><a class="l" onmousedown="return rwt(this,'','','','6',
'AFQjCNE3acQNFxBDQ4S2wYC0wVeDKQSSjQ','',
'0CKUBEBYwBQ',null,event)" href="
http://www.jpa.or.jp/chishiki/index.html"><em>たまご</em>
の知識</a></h3><div class="vspib" role="button" tabIndex="0" aria-label="結果の詳細">
<div class="vspii"><div class="vspiic"></div></div></div><div class="s">
<div class="f kv"><cite>www.jpa.or.jp/chishiki/index.html</cite><span class="gl">
953 :
そのA:2012/06/20(水) 18:32:05.39
- <a onmousedown="return rwt(this,'','','','6','AFQjCNFdsuuoe_u5WYesXSqMlVLQ9T5KuA','','0CDcQIDAF',null,event)" href="
http://webcache.googleusercontent.com/search?q=cache:wVOdEgj0slAJ:www.jpa.or. jp/chishiki/index.html+&cd=6&hl=ja&ct=clnk&gl=jp">キャッシュ
</a></span><span class="vshid"><a href="/search?hl=ja&q=related:www.jpa.or.jp/
chishiki/index.html+%E5%8D%B5&tbo=1&sa=X&ei=sZXhT6-XJobjmAWxq53xAw&ved=0CDgQHzAF">
類似ページ</a></span></div><div style="display: none;" id="poS5" class="esc slp">一般公開で +1 しました
<a class="fl" href="#">取り消す</a></div><span class="st"><em>
卵</em>は私たちの食生活に欠かすことのできないほど身近なものです。それだけに、
「実は知らなかった!」ということも多いのではないでしょうか? このページでは、
<em>卵</em>についてのいろいろな知識を紹介しています。
興味をもった項目をクリックして、<em>卵</em>への理解を <b>...</b>
<br></span></div></div></li>
※メッセージが長すぎます、と怒られちゃうので分割して投稿しています。
954 :
そのB:2012/06/20(水) 18:34:34.61
そして、
http://www.jpa.or.jp/chishiki/index.html というURLを抜き出す為に
// string wk = ごにょごにょした上記のHTMLが含まれています。
System.Text.RegularExpressions.MatchCollection mc2 =
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[A-Za-z0-9_\.\/].*?)""><em>.*");
foreach (System.Text.RegularExpressions.Match m2 in mc2)
{
string s = m2.Groups["url"].Value;
}
というコードを実行すると …続く
955 :
そのC:2012/06/20(水) 18:37:11.79
956 :
デフォルトの名無しさん:2012/06/20(水) 18:37:29.01
ちょwww
もうちょっと整理しろよ
長々と書くならコピペだけで動くコードにして、コード貼るサイトに書いてくれ。
結局、
null,event)" href="[URL]"><em>
の[URL]部分だけ取り出したいのに、うまくいかないということか?
ざっと見た感じ
(?<url>[A-Za-z0-9_\.\/].*?)
の後ろのピリオドが邪魔じゃね?
パラメータいらないなら、:だけ追加して
(?<url>[A-Za-z0-9_\.\/:]*?)
こうとか?
>>960 コード貼るサイトあるんだよ。
質問スレのテンプレ探してみ。
>>961 ありがとうございます。 "" を含まないという意味ですよね。
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)""><em>.*");
でやってみたところそれらしいそれらしい値は取れる様になりました。
ただ、ごにょごにょしたHTMLが10件ほどあって
そのうちの7つはしっかり抽出出来るのですが
それ以外が未だうまくいかないのでもうちょっと頑張ってみます。
964 :
963:2012/06/20(水) 20:32:55.97
>>962 ありがとうございます。便利なサイトがあるものですね。
↓の正規表現を書いていたのですが、
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)""><em>.*");
この正規表現の場合、(A)の場合は取得出来るのですが、
(B)の場合に取得が出来ません。(B)の場合でも取得出来るにはどういう条件を追加すれば良いでしょうか?
(A) BYwBw',null,event)" href="
http://www.nichirankyo1.or.jp/"><em>卵1</em>
(B) BYwBw',null,event)" href="
http://www.nichirankyo2.or.jp/">日本<em>卵2</em>
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)"">[^<]*<em>");
マッチさせたい範囲を明確にして欲しいな。特に、後ろの<em>以降もマッチさせる必要あるのかどうか。
こんなのでも確定出来るんじゃないの?
System.Text.RegularExpressions.Regex.Matches(wk, @",null,event\)"" href=""(?<url>[^""]*)");
あと、スペース入る可能性あるところ全部に\s*を入れるのがセオリー。
>>965 ありがとうございます。出来ました!!!セオリーもありがとうございます。
[^<]* の解釈としては、
< 以外 の文字列が 0 回以上存在する
で良いでしょうか?
>>966 そうです。
>>961の[^""]*も同様。
マッチを明確にすることが出来るので、常套手段です。
これでうまくいかないときだけ.*?を使います。
くどいようですが、まず最初に「確実に確定できるマッチ範囲」をしっかり決めた方が吉です。
ありがとうございます。修行します。
返されるデータを正規表現だけで全て抽出しようと試みてましたが
結構厳しそうです。
あらゆるパターンがあるので。
地道に文字列操作します。
【6月19日 AFP】大韓航空は18日、ケニアの人々が「原始的エネルギー」で満ちていると広告で表現したことを謝罪し、
ウェブサイトから広告を削除した。
ソウル・ナイロビ間の便を近日就航する予定の大韓航空は、そのPR広告で「大韓航空で飛び、アフリカの大いなるサバンナ、
サファリツアー、そして原始的エネルギーに満ちた先住民たちを楽しみましょう」と表現した。
あるケニア人はこうツイートしている。
「私の #原始的エネルギーを処理するために今日はライオン狩りとゾウいじめをしようと思う」
別のケニア人はこうツイートした。
「私は毎朝起床するために #原始的エネルギー を使っています」
数百件のツイートが集まったことを受け、大韓航空は、「ナイロビ便の最近の広告についてしかるべき確認を行っています。
この状況に対して心から謝罪いたします」と発表した。
以下省略
http://www.afpbb.com/article/economy/2885046/9141540
972 :
uy:2012/06/22(金) 14:33:13.43
進化しないよね、正規表現
機能が足り無すぎ
(?R) とかあるじゃん。
>>972 ^
$
(|)
[]
n
\
これで十分です
975 :
uy:2012/06/22(金) 17:29:25.46
そう思うなら君はそこで永久に成長止まれば良いわけで
正規表現って何年前に作られたもので何年間ろくに成長せずに止まってるんだよっていう
正規表現内にシンタックスシュガー入れないからいつまでたっても正規表現は見にくい
人間が書ける範囲を狭める
>>975 そう思うなら君が新たなる次世代型正規表現とやらを作ったらいかがかね?
>>972-975 さすがにこれは「お前らがそう思うんなら(ry」としか言いようがない
こちとらPerlとかRubyの最新版のマニュアル見てたら
\gだの\kだの\pだの今まで知らなかった拡張記法があって脳汁が溢れそうなんだがw
俺はuyのように全てを知り尽くしたわけじゃないから、
今後もこういった発見で楽しい思いをさせてもらうよ
>>975 シンタックスシュガーがほしいだけなの?
シンタックスシュガーがあれば人間がかける範囲が広がると思うのはちょっとどうかと
正規表現はマスターすれば
バリデーションチェックとか速そうですね。
正規表現を考える時間に
文字列操作でバリデーションを作成した方が早かったりするので悩みますねん。
時間あるときに考えて、作って、速度比較してみたらいいよ。
たぶん今作ってるほうが速いよ
使えない人ってなぜか使わなくてよい理由を探して口にださないと済まないみたいだ。
ちょっと複雑になると途端に見にくくなるとか、プログラム側で分岐させるだけでスッキリする場合とか、
確かにそういうところがあるのは否定出来ない。
そういえば否定もちょっとめんどい。
>>981 でもある言語の同じレベルのプログラマ達の中で、使える人と使えない人が
くっきり分かれてしまうのは問題だと思いませんか。
>>980 物にもよるかと思いますが
プログラムでロジックを組んだ方が開発時間が短縮出来る気がしてます。
確かに誰でも使いやすい道具になるのは正しいこと。
俺だって昔はなんだこりゃと思った時期もあったし、
それを忘れてこんなの出来ないのかよと言うのはただの傲慢かと思う。
でも、そんなに難しくないから理解すると楽できるとこがありますよ。
>>982 否定は誰かが構文作ってくれるに違いない。あれは人がやる仕事じゃない。
986 :
uy:2012/06/22(金) 20:05:54.52
>>978 そこからか?
アセンブラで作れる範囲のプログラムと
C#で作れる範囲のプログラム
理論上は作れるとかいうボケいらないよ?
987 :
uy:2012/06/22(金) 21:59:25.71
str = "12345678"
str.scan(/\d{1,3}/) {|m| p m }
は
"123" "456" "78"
と表示されるけどこれを
"12" "345" "678"
にしたんだけどどうやんの??
>>984 うん、ものによるのは確かにそうで、ある程度複雑になった場合は、
正規表現のほうが明快かつ速度も優れる場合があると思う。
逆に、ある程度単純な場合は正規表現を使わないほうが速いことが多い。
>>981 使うな厨だといいたいのかな。
>>986 C#がアセンブラのシンタックスシュガーであるという大ボケを見せてくれてるの?
989 :
uy:2012/06/22(金) 22:20:46.61
>C#がアセンブラのシンタックスシュガーであるという大ボケを見せてくれてるの?
おい
アセンブラで3Dゲー作れ
>>989 その前に答えてよ。
C#ってアセンブラのシンタックスシュガーなの?
991 :
uy:2012/06/22(金) 23:21:59.97
(?:.*\n{2}).*
の書き込みをする人にイラッ☆
>>987 reverseしておいてそれやって、reverse
ふつう、言語そのものを、低水準言語のシンタックスシュガーとは言わないような。
996 :
デフォルトの名無しさん:2012/06/23(土) 01:00:58.28
ラクダ本4版の正規表現の章は100ページ近くあって軽くひきつけを起こした
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。