• ベストアンサー

PHP 正規表現改行したい

preg_match でHTMLタグを解析するために正規表現を組んでますが、正規表現部分が長すぎてソースがわかりづらいので機能に影響すること無く改行して見やすくする方法はありますか? もしくはHTMLのパースならこうした方がいいよ的アドバイスでも

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

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.3

x修飾子を使うと、全ての空白文字が無視されます。 $rexp = <<<EOS / foo| bar| baz /x EOS; $str = "foo is bar and baz."; $out = preg_replace($rexp, "@", $str); var_dump($out); >もしくはHTMLのパースならこうした方がいいよ的アドバイスでも よほど簡単なケース以外では、専用のライブラリを使ってください。 http://jp2.php.net/manual/ja/refs.xml.php

muuming2001
質問者

お礼

ありがとうございます。 x修飾子やってみます。

その他の回答 (2)

回答No.2

aaaaaaaaaa("bbbbbbbbbbbbbbccccccccccccc"); これが長いとしたら、第一段階は aaaaaaaaaa( "bbbbbbbbbbbbbbccccccccccccc" ); こんなかんじだとして、それでも長いなら、 aaaaaaaaaa( "bbbbbbbbbbbbbb".   ←ドットを忘れず! "ccccccccccccc" ); と文字列結合を使ってみるのも手ではないですか?

muuming2001
質問者

お礼

ありがとうございます。

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

正規表現の中に改行を入れたり注釈をいれたりというのは原理上できないと思います。 そもそもHTMLを正規表現で完全に解析できるかどうかとなると、タグを抜くだけで結構大変そうです。 https://www.mk-mode.com/octopress/2013/02/13/regexp-html-tag/ イレギュラーなものを解析しようとすると https://code.i-harness.com/ja/q/ab2ee みたいな議論の末にギブアップするかも。 ですので、車輪の再発明みたいなことはやめて、PHPにお任せしたほうがいいような気がします。 http://blog.katty.in/1400

muuming2001
質問者

お礼

ありがとうございま。

関連するQ&A

  • PHP5の正規表現でうまくマッチできない

    PHP5の正規表現で文字列中の独自タグをパースしようとしていて、 うまくいかず困り果てています。 正規表現パターンは、/<tag>.*<\/tag>/ 対象文字列は、<tag>こんにちは</tag><tag>こんばんは</tag> preg_match_all('/<tag>.*<\/tag>/', '<tag>こんにちは</tag><tag>こんばんは</tag>', $result) でマッチした文字列は、 $result[0]:<tag>こんにちは</tag> $result[1]:<tag>こんばんは</tag> となることを期待しているのですが、 実際は、 $result[0]:<tag>こんにちは</tag><tag>こんばんは</tag> となりました。 <tag>タグの間に入る文字列長、文字列フォーマットは不定です。 どうすれば期待通りの振る舞いに出来るでしょうか?

    • ベストアンサー
    • PHP
  • 改行や、タブを含む正規表現の方法

    HTMLからある部分抜き出す時、 たとえば、あるソースから <title>なんたら</title> という言葉を抽出する場合、 $htmlに全ソースが格納されていると仮定して 単純な正規表現で preg_match('/<title>なんたら</title>/', $html, $matches); といえれると、"<title>なんたら</title>"という文字が出せます。 ところが <title>   なんたら </title> のような改行やらタブが含まれていると抜き出すことができませんでした。 いろいろ調べますと、文字エスケープシーケンスというものがあり \nは改行 \tタブと書いてあるサイトがありましたので preg_match('/<title>\n\tなんたら\n</title>/', $html, $matches); という風に記述してみました。 しかし、それでも改行とタブの含まれた<title>から 文字を抜き出すことはできませんでした。 改行とタブの含まれた<title>から 文字を抜き出すには、どのような記述をすれば良いのか ご指導お願いいたします。

    • ベストアンサー
    • PHP
  • タグの中だけ改行を除去したい

    HTMLを解析するプログラムを作成しています。 HTMLタグを正しく認識するために、下記のようにして、HTMLタグの中("<" と ">" に囲まれた範囲)の改行コードを除去するようにしました。 $html = preg_replace ("/[\t\r\n]/"," ",$html); これで一応動作するようになったのですが、HTMLタグでない文章のほうも、改行がすべてなくなってしまうので、HTMLソースが見づらくなってしまいました。 HTMLタグの中だけ置換が有効になるようにしたいのですが、良い方法はありますでしょうか?

    • ベストアンサー
    • PHP
  • タグの中の改行文字を正規表現で削除したい

    たとえば、 <a href="~" target="_blank"> というタグの中の改行文字(\n)を削除する正規表現を教えてください。 ただし、preg_replace_callbackは使わないでください。

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

    正規表現/Uについて preg_match('/^(.*)(:([0-9]+))?$/U',$HTTP_SERVER_VARS['HTTP_HOST'],$matches)のUは改行などがあってもマッチさせるために入れてあるのでしょうか。また/^(.*)(:([0-9]+))?$/UのUをなくして*や+や?を加えて表すとどんな式になるのでしょうか。

    • 締切済み
    • PHP
  • 正規表現/スペース以降改行までのグローバルマッチ

    JavaScript正規表現で、「スペース1つ」以降「改行」までのグローバルマッチを行いたいのですが、うまくいきません。 ■マッチさせたい内容 ・年末なのに ここをマッチさせたい ・正規表現が ここもマッチさせたい ・ ここもマッチさせたい ・ここはマッチさせたくない ・ここはマッチさせたくない ■うまくいかない正規表現 /\s{1}.*[\n\r]/g

  • preg_replaceでの正規表現について

    お世話になります。 ereg_replace で書いた正規表現による置換処理を、 preg_replace に置き換えようとしています。 (preg_replaceの方が処理が速いとマニュアルにあったので) ところが、preg_replaceでの正規表現検索がうまくいかないで困っています。 基本的には、ereg_replaceの正規表現部分を//で囲んでいるだけです。 具体的には、下記のような処理を書いています。 間違いがあれば、ご指摘いただけましたら幸いです。 //### うまくいっている ereg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='\{dokuji tag\}.+\{_dokuji tag\}'; $replace=''; $html=ereg_replace($search,$replace,$html); //不要部分の削除 //### うまくいっている ereg_replace のパターン ここまで ### ↓ //### うまくいかない preg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='/\{dokuji tag\}.+\{_dokuji tag\}/m'; $replace=''; $html=preg_replace($search,$replace,$html); //不要部分の削除 //### うまくいかない preg_replace のパターン ここまで ### //### 置き換えるソース('template/temple.html') ここから ### <!-- {dokuji tag} --> <tr> <td nowrap><strong>タイトル:</strong></td> <td> <input type="text" name="name" size="80" value="{name}" /> </td> </tr> <!-- {_dokuji tag} --> //### 置き換えるソース('template/temple.html') ここまで ### よろしくお願い申し上げます。

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

    正規表現でドメインの取得 http://auctions.yahoo.co.jp/ http://yahoo.co.jp/ http://www.yahoo.co.jp/ 上記のURLのような場合にyahoo.co.jpの部分を抜き取りたいと考えています。 どのような正規表現を書けばいいか分かりません。 http://php.s3.to/man/function.preg-match.html こちらを参考にしました。 comなどなら問題ないのですが、co.jpなどはうまくいきませんでした。

  • http://とhttps://のどちらでもマッチングできる正規表現

    http://とhttps://のどちらでもマッチングできる正規表現の書き方が分かりません。aタグの中のhref="のあとのURL部分にhttpでもhttpsのどちらでもOKのマッチングをかけたいです。 具体的にはhttp://www.aaa.co.jpでもhttps://www.aaa.co.jpのどちらでもpreg_match_allでマッチングをかけたいです。 $count=preg_match_all("正規表現",$URL,$maches); という感じでhttpかhttpsのURLに引っ掛けたいです。 教えてください

    • ベストアンサー
    • PHP
  • 正規表現の書き方を教えてください

    正規表現の書き方を教えてください 膨大なサイトデータに含まれる、忍者ツールズのアクセス解析タグを 複数行置換ツールを使って、一気に削除したいです 正規表現を使えば、以下のアクセス解析タグを削除できると思うのですが どのように正規表現を使って記述すれば、いいのかわかりません ・アクセス解析タグ中の「15695600k」 ・リンク先(http://futoko.jpnz.jp、kateikyousi.rentalurl.net) ・アンカーテキスト(不登校 高校、家庭教師) は、タグによって変化する変数です ■忍者ツールズのアクセス解析タグのソース例 http://analyze.ninja-web.net/ ■使用する複数行置換ツール http://www.vector.co.jp/magazine/softnews/060905/n0609051.html ※このツールでできない場合は、用件を満たすツールを教えていただけますと幸いです よろしくお願いいたします

専門家に質問してみよう