• 締切済み

文字の取り出し(正規表現?)

まず、やろうとしてることを説明します。 ・外部サイトから複数の文字パターンを取得  (これが何十ページ。しかしXXX.php?ID=xxで、   xxの値が2文字の英数字。テンプレートも同じ。)         ↓ ・データに書き出す。         ↓ ・データを表にして表示。 つまり、例えば外部サイトに "かきくけこ 人数 XXX人 名前 YYYYY あいうえお" という内容があって、その中からXXXとYYYYYを抜き出して、 それを表で出力しようとしてます。 質問の内容ですが、 例えの場合のXXXとYYYYYを抜き出す方法を探しています。 まだPHP初めて数日、みたいな自分なのですが、 調べると正規表現が関わるような感じだと分かりました。 しかしよく分からなかったのでご教授いただきたいです。 (その後の処理まで解説いただけると助かります。) 現在の状態は <?php $url = "http://hogehoge.jp/XXX.php?GId=xx"; $data = file_get_contents($url); $data = trim($data); $data = str_replace("\r","",$data);//改行除去 $data = str_replace("\n","",$data);//改行除去 $data = strip_tags($data);//タグ除去 echo $data; ?> で、外部サイトの文字すべてを出力するまでできています。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

preg_match又はereg_matchという正規表現用の関数を使います。 詳しい書式がわからないとかけませんが、 ("人数")(スペース)(数字)("人")(スペース)("名前")(スペース)(名前)(スペース) という書式なら <?php mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); $url="http://hogehoge.com/data.html"; $data=file_get_contents($url); preg_match("/人数 (\d+)人 名前 ([^\s]+)/u",$data,$arr); //mb_ereg("人数 (\d+)人 名前 ([^\s]+)",$data,$arr); print_r($arr); ?> とすると、$arr[1]に人数が、$arr[2]に名前が入ります。 \d は数字を、\s は空白を表しています。 詳しくは正規表現の参考ページを見ると良いと思います。 preg_matchの場合文字コードはUTF-8にする必要があります。 mb_eregを使う場合は、mb_regex_encodingを変更することで、他の 文字コードもいけます。

関連するQ&A

  • 正規表現について教えてください。

    正規表現について教えてください。 以下の様なデータから末尾2文字が「01」を除くものだけを 取り出したいのですが、どのように書けばよいでしょうか。 ----------------------------- xxx01 xxx02 xxx11 xx100 xx101 xx201 ----------------------------- ※xには、0-9A-Zの何れかが設定 上記の例でいうと、 A0001:除外 A0002:出力 A0011:出力 A0100:出力 A0101:出力 A0201:出力 となります。 要は、 「A0001」は出したくないが、「A0101」、「A0201」、「A1001」などは出したいです。 末尾から3桁目が問題になるのではないかと思っています。 A[0-9][0-9]*[^1]') A[0-9][0-9]+[^1]') A[0-9][0-9][0-9][^1]') A[0-9][0-9][0-9]([^1]+)') A[0-9][0-9]([0-9]+|[0-9][^1])') A[0-9][0-9]([^0][0-9])([^1][0-9])') としてみたのですが、表示されません。 よろしくお願いします。

  • 正規表現について

    すみませんが、教えてください。 PHP+MYSQLで掲示板のようなサイトを作っています。 投稿したコメントの中にURLがある場合、次の変換で、リンクを設定するようにしています。 $str = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)", "<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>", $aStr); さらに、次のことがしたいのですが、どうすれば良いのか教えてください。 (1)URLが長い場合、表示する文字列を指定文字数でカットする。 (2)URLのみをリンク設定付で切り出す。 当方、正規表現がほとんど理解できていません。 (オイラリーの本を買ったのですが、時間がなくて学習できていません。) 申し訳ございませんが、こうすれば良いというコードを教えていただければ、幸いです。

    • ベストアンサー
    • PHP
  • 正規表現で置換

    その1 $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; その2 $str = "<img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "<img src="./foo/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; このような文字列があった時に、次のように従って置換したいです。 1.imgのタグの内部に、「http://yyy.hoge.jp/hage/hige/xxx.jpg」という文字列があった場合、「./foo/faa/fii/xxx.jpg」という文字列に置き換える。 2.それ以外のURLの場合は置換しない。 3.その1とその2では「xxx.jpg」となっていますが、jpg以外の拡張子の場合も存在する。 4.日本語とURLの位置や個数はバラバラです。 5.URLの中のxxxとyyyは不定の文字列で、hage、hoge、hige、foo、faa、fiiは固定です。 6.使用している言語はPHPです。正規表現を1度だけでできれば理想的ですが、今回は2回に渡った処理でも問題ありません。 以上です。正しく処理できる正規表現、あるいは下記の正規表現の誤りを教えて頂ければ幸いです。 お手数ですが、よろしくお願い致します。 下記の方法では、うまくできませんでした。 $pattern = "/http:\/\/.*?hoge.jp\//"; $replacement = "./"; $str= preg_replace($pattern, $replacement, $str); $pattern2 = '/\/?hage\/hoge/'; $str = preg_replace($pattern2, '/foo/faa/fii', $str);

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

    お世話になっております。 半日悩んでうまくいかなかったので教えてください。 このようなクエリつきのURLがあります。 $str = "http://XXX/index.jsp?****************&k=zp&pr=abc&guid=ON&param=adfdOI%G_D000&pr=aaaa&mrr=aaaa&op=bbb" この中のパラメータから、特定のパラメータ以外を除去したいのです。 残したいのは k= pr= mrr= op= のみです。 こんな感じで正規表現を書いてみたのですが、 preg_replace("/((?!k=)(?!pr=)(?!mmr=)(?!op=)([\w%_-]+)=)[\w%_-]+\&?/", "", $str) http://XXX/index.jsp?k=zp&ppo こんな結果になってしまいます。 お詳しいかたご教授願えませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • str_replaceで文字化け

    お世話になります。 PHPでstr_replaceを使用しましたら、 「ー」や「・」などの文字が、文字化けを してしまいました。 いろいろ調べたのですが、よく分からずに 困っています。 PHPで文字の置換を行いながら、文字化けを しない方法はどのようにしたらよいのでしょうか。 $abc = str_replace(" ", "", $abc); のあとに$abcを出力しましたら、文字化けをして しまいました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP初心者です。コード内容を教えてください。

    PHP初心者なので以下のコードをお教えいただき たいです。これは改行について解説しているところに 出てきた例文です。 質問1 コードの1を実行した結果がブラウザ表示だと改行なし ソース表示だと改行ありで表示されるのですが、それがよく わかりません。'で文字列を囲うとそのまま出力されるため htmlで<br>されないというのはわかるのですが、ソース 表示が改行されているのが分かりません。ソースで改行 するには/(逆)nやPHP_EOLを使わなければ改行できないので はないでしょうか? (PHPコード1) $str = '改行を削除して処理します。<br> ダブルクオートじゃないと改行文字は扱えません。'; $str = str_replace(array('<br>','', '$str); echo $str; 質問2str_replace関数がありますが、この手のわからない 関数をリファレンスで引くと str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed のように説明には書いているのですが、str_replace("2","3","1"); 1の中の2すべてを3に置き換える。これはわかります。しかし、 説明例文に記載のmixedやら[, int &$count ] ) : mixedはよくわかりません これは何なのでしょうか? 長くなりましたがどうか回答お願いします。

    • ベストアンサー
    • PHP
  • sjisの文字化けとその対処方法について

    今掲示板を作っています。 sjisでは特定の文字(表・予・申・能など)が文字化けする問題がありますが、簡単に対処できる方法をさがしています。 一番やりたい方法が、str_replace()関数を使って、例えば「表」を「\表」と書き換える関数を作って、何か書き込むときにはテキストデータをその関数にかけてしのぐというものです。しかし、実際に下のようにやってみると、PHPエラーが発生します。 $textdate = str_replace("表","\表",$textdate); ちなみに、この文字が「表」以外の文字化けをおこさない文字ならばこのエラーは発生しません。 文字コードレベル(16進数レベル)で置換しなければならないのでしょうか?

    • ベストアンサー
    • PHP
  • 正規表現文字列をDB登録

    正規表現に詳しくないことと、PHPも携わったばかりなので、苦戦しています。ご教授いただけると助かります。 以下のようなことをやろうとしています。 1.フォームで入力された正規表現を文字列としてDBに登録していきます。 例{http://[w-.]*test_site.jp}i 2.登録データを取り出して、preg_replace()を使いたいです $url_text = {http://[\w\-.]*test_site\.jp}i $db_data ←1のデータ(配列になってます) preg_replace($db_data, '', $url_text, -1) そうすると、$db_dataの中身は\がないために、エラーとなります。 Warning: preg_replace(): Compilation failed: range out of order in character class at offset 10 DBから取得した後に、変換するような関数などあるんでしょうか。 それとも他の方法を探したほうがよいのでしょうか。 一致したものを省きたいような処理なのですが・・・。 ためしにpreg_quote()をかけてみましたが変な風に置換されてダメでした。 うまく説明もできなくて申し訳ないですが、何か良い案ありますでしょうか。 必要であれば、補足いたします。 ぜひお願いいたします。

    • ベストアンサー
    • PHP
  • 必要な文字のみに変換する場合

    Text1に入力された文字からアルファベットの大文字のみをText2へ表示させたい(つまり記号、2バイト文字などは省き、小文字は大文字に変換)と考えています。 Dim Str as String   Str = Text1.text   Str = Trim(Str)   Str = Replace(Str, " ", "")   Str = Replace(Str, " ", "")   Str = Replace(Str, vbTab, "")   Str = Replace(Str, vbCrLf, "") スペース、タブ、改行は空白文字に置き換えることができたのですが、アルファベット以外の記号や小文字への変換、2バイト文字の扱い方などが思いつきません。 何か方法がありましたら、お教えください。

  • 【PHP】preg_replace() で正規表現が正常に動かない?

    PHP5利用者です。 preg_replace() が思い通りに動かないため困っています。 マルチバイト文字及び正規表現を使おうとした場合動作がおかしいのです。例えば、 「 . 」は任意の1文字とされていますが、 $str = preg_replace("/第.回/", "第3回", "今日は第*回目です。"); 等と書いても何も置換されません。 これは一体どういうことなのでしょうか? 文字コードはUTF-8です。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう