• ベストアンサー

ページ全体の特定語句の抽出の正規表現について

4017Bの回答

  • 4017B
  • ベストアンサー率73% (1308/1782)
回答No.1

最終的にどんな形でデータが欲しいのか分らないと答えようが無いよ。 単純にHTML形式の文字列からタグを除去したいのか。それとも個別に見出しみたいなラベル付けして、語句を配列化したいのか…?? P.S. リンク先には「データの転載は禁じられています。 」って書いてあるけど?危険な臭いがする…(笑)。

takagoo100
質問者

お礼

ご回答ありがとうございます。 目的は、HTML形式の文字列からタグを除去して、 例えば「発音」だったらその語句を抽出したいのです。 この「【名】」「【自動】」「【他動】」間の抽出方法が複雑だったのと、 それと一応自分なりに「発音」などを抽出できたのですが、 このやり方がベストなのかな、というのがありまして、 こういうページの抽出方法のアドバイスを頂きたいです。 あくまでも抽出方法やその正規表現が具体的に知りたいだけです。

関連するQ&A

  • 正規表現での改行数を求めるにあたって

    以下の文字列がフォームからPOSTされたとします。 ------------------- 1 2 3 4 5 ------------------- ポストされた文字列が$strに格納されているとして、 以下を実行しました。 ------------------- print preg_match_all("[\n\r]", $str, $dummy); print preg_match_all("[\r\n]", $str, $dummy); print preg_match_all("[\r]", $str, $dummy); print preg_match_all("[\n]", $str, $dummy); ------------------- 結果はこうなりました。 ------------------- 6 6 10 10 ------------------- どうやらマッチパターンが"[\n\r]"と"[\r\n]"の場合は空白行の数を、 "[\r]"と"[\n]"の場合は純粋に改行数を返しているようです。 どうしてこのような差が出るのでしょうか? 文字コードはEUC、改行コードはLFで統一していますが関係ありますか?

    • 締切済み
    • PHP
  • 正規表現について

    PHP5.2.4を使用しています。 1文字以上のアルファベットと数字の組み合わせは許可(含めて) かつ 「ab」は許可しない(含めない) という正規表現はどのように記述すれば良いのでしょうか?(「01ab」「abc」は許可、「ab」は許可しない) 一応自分なりに考えてみたのですが、 $str = "abc"; if (preg_match("/[^(ab)][a-z0-9]+/", $str)) { print "match<br>\n"; } やはり駄目でした・・・

    • ベストアンサー
    • PHP
  • 、"(ダブルクォーテーション)で囲まれている文字列を正規表現で取得

    質問させてください。 abcdef -s "xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh" asdakjsd のような文字列があります。 これの、"(ダブルクォーテーション)で囲まれている文字列を取得したいのですが、正規表現がうまくいきません。 取得結果としてはは、xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh の部分がほしいです。 preg_match('/"([.*])"/', $str, $matches);とやったり preg_match('/\"([.*])\"/', $str, $matches);とやったり preg_match('/\"([.*?])\"/', $str, $matches);とやったりしたのですが、 どうしても$matchesにほしい結果は入っていません。 どのような正規表現で取得可能でしょうか? 何卒ご教授ください。

    • ベストアンサー
    • PHP
  • 正規表現のコーディングについてお願いします。

    こんにちは、よろしくお願いいたします。 正規表現パターンを書く場合に皆さんがどのようにされているか教えてください。 例えば(ちょっとムリヤリ感が強いですが)、'Price \5800-' という文字列の \5800 の部分に preg_match でマッチさせたいとします。 単純に考えると、 /\\\d+/ のようなパターンが思いつくのですが、それを文字列として preg_match に渡す際に、コードはどのように書かれますか? <?php   $str = 'Price \5800-';   //とりあえず、'/\\\d+/' と書き、'/\\\\\\d+/' と、\ をそれぞれの \ に書き足す   if ( preg_match('/\\\\\\d+/', $str, $match) ) {     print_r($match);   } ?> 「まず、パターンを書き、全ての \ の前に \ を書き足す。」というのが無難なのかな?と思い、そうしていますが、 そういった考え方で間違っていないでしょうか? どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPでの正規表現について

    こんにちは。最近、正規表現の勉強を始めました。 以下のプログラムをテストしているのですが、思ったとおりに動かずに困っています。 (1)円マークにヒットしない (2)行頭の”今日”にヒットしない(この場合2と4行目にヒットするのでは?) 何がおかしいのか、アドバイスをいただけませんか? <html> <head> <title>正規表現のテスト</title> </head> <body> <pre> <?php $post = '\750 今日は晴れです。今日は晴れです。今日は晴れ です。今日は晴れです。今日は晴れです。今日は晴れです。 今日は晴れです。今日は晴れです。今日は晴れ です。今日は晴れです。今日は晴れです。今日は晴れです。'; function my_insert_post($post){ global $post; preg_match_all("/\\/", $post, $matches);//(1) print_r($matches); preg_match_all("/^今日/", $post, $matches02);//(2) print_r($matches02); echo "<hr />"; print_r($post); } my_insert_post(); ?> </pre> </body> </html> どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現について

    PHP5.2.4を使用しています。 任意の数の引数がある文字列をpreg_matchを使ってマッチさせたいのですが、 例えば"ENUM(ab,cd)"は ab と cd の2つの引数があるとします。 次のようなパターン文字列まではアイデアとして浮かんだのですが、 引数の最後は , がないので当然ですがマッチしません・・・ どのようにパターン文字列を記述すれば良いのでしょうか? $str = "ENUM(ab,cd)"; if (preg_match("/ENUM\(([^\,]+\,)+\)/", $str, $match)) { print "{$match[0]}<br>\n"; }

    • 締切済み
    • PHP
  • 正規表現で抽出がおかしい

    掲示板のSETTING.TXTを読み込んでサブタイトルを抽出するコードなんですけど、そのサブタイトルにスペースが入っているとうまくいきません。 以下、ソースコードです。 $settings = fopen("./$bbs/SETTING.TXT",'r'); $setting = fread($settings,filesize("./$bbs/SETTING.TXT")); fclose($settings); preg_match('/BBS_SUBTITLE=(\w+)/',$setting,$match); echo $match[1];

    • ベストアンサー
    • PHP
  • PHP正規表現について、ゴミ?

    正規表現の勉強をしています。 カッコの中の値を取得したいのですが、ゴミみたいのが入ってしまい困っています。 プログラムは $aaa = "お茶[抹茶]、お花[あじさい]、ニャー[猫]、カフェオレ[100円]"; preg_match_all("/\[(.*?)\]+/", $aaa, $matches); print_r($matches); と書きました。 結果は、 Array ( [0] => Array ( [0] => [抹茶] [1] => [あじさい] [2] => [[猫] [3] => [100円] ) [1] => Array ( [0] => 抹茶 [1] => あじさい [2] => [猫 [3] => 100円 ) ) となりました。「ー」の後に「[」がついてしまうのはなぜなんでしょうか?? 解決策ありましたら宜しくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現の「^」と「$」がうまくいかない

    正規表現の「^」と「$」を使うとうまく働いてくれません。 あるデータの中の、行頭がhttpで始まる1行を取り出したいです。 あるデータ$dataを preg_match_all("/^http(.*?)$/",$data,$result); print_r($result); で出力すると、 ■結果 Array ( [0] => Array ( ) [1] => Array ( ) ) となり、うまくいきません。 preg_match_all("/http(.*?)\n/",$data,$result); やけでこんな感じにやったら、行頭から始まるhttp.....も行頭からはじまらないものもゲットしてすべて出力してくれてしまいます。 行頭から始まるものだけを出力するにはどうしたらいいでしょうか。 php5 UTF-8環境

    • ベストアンサー
    • PHP
  • preg_replace 後方参照

    preg_replace関数の外で後方参照を行うことはできないですか? $str = '1234abcde' $str = preg_replace("/^(\d+)/", "", $str); この結果は、$str = 'abcde' ですが、()内の数字つまり1234をpreg_replaceの外で確認するには、 $matches = array(); if(preg_match("/^(\d+)/", $str, $matches)){  $str = preg_replace("/^\d+/", "", $str);  $tmp = $matches[1]; //参照 } という風にpreg_matchと併用するしか方法はないのでしょうか? (  perl でいう $str =~ s/^(\d+)//; $tmp = $1; というようなことをしたい。 )

    • ベストアンサー
    • PHP