• 締切済み

preg_match_allのバグ?

改めて質問させていただきます。 <textarea cols=36 rows=15 name="before" wrap="virtual" style="width:320px;height:250px;">方法</textarea> <textarea cols=36 rows=15 name="after" wrap="virtual" style="width:320px;height:250px;">Method </textarea> これを preg_match_allの'/<textarea.*>(.*)<\/textarea>/ms'で二つとも取得するのですが、 他に色々と長い文字列を打ったうえで上記を取得すると何も表示されません。 ちなみに、文字の長さが半角で2820文字以上になると表示されません。 2819未満だとちゃんと取得して表示してくれます。 preg_match_allの関数のマニュアルを見たところそのような仕様は書いてありませんでした。 何かこれを取得できるように解決する方法はありませんでしょうか?

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

<textarea ... のデータが二つありますけど、これらは 一度に渡されるものですか? それとも別々に渡されるものですか? もし前者だとすると、長さがどうであろうと期待通りの 動作はしていないと思うのですが。 array(2) { [0]=> array(1) { [0]=> string(314) "<textarea cols=36 rows=15 name="before" wrap="virtual" style="w idth:320px;height:250px;">方法</textarea><textarea cols=36 rows=15 name="after" wrap="virtual" style="width:320px;height:250px;">Method</textarea><textarea cols =36 rows=15 name="after" wrap="virtual" style="width:320px;height:250px;">Method </textarea>" } [1]=> array(1) { [0]=> string(6) "Method" } } もう少し具体的な、「うまくいかないパターン」 のデータを説明してもらえませんか? textareaタグの属性のところが長いとか タグが始まるまでが長いとか 開始タグと終了タグの間にあるテキストが長いとか

回答No.1

全く関係ないかも知れませんが、以下にするとどうでしょうか? '/<textarea.*>(.*)<\/textarea>/msU' 文字数などには関係しないと思うのですが、もし何かあればバグかも知れませんね。

関連するQ&A

  • テキストエリアの作成法

     下記のような横一列に並んだ3つのテキストエリアを作成しました。Mozilla Firefoxではほぼ期待通り表示されましたが、インターネット・エクスプローラーでは全く表示されません。後者でも表示させるにはどうしたらよいでしょうか。 またテキストエリア内の文章に改行をつけるにはどうしたらよいでしょうか。 <form><p class=MsoNormal><span><TEXTAREA ROWS="13" COLS="70" NAME="textarea1"id=textarea1 style="HEIGHT: 540px; WIDTH: 300px; font-size: 9pt" readonly> 『テキスト』 </TEXTAREA> &nbsp;<TEXTAREA ROWS="13" COLS="70" NAME="textarea1"id=textarea1 style="HEIGHT: 540px; WIDTH: 300px; font-size: 9pt" readonly> 『テキスト』 </TEXTAREA> &nbsp;<TEXTAREA ROWS="13" COLS="70" NAME="textarea1"id=textarea1 style="HEIGHT: 540px; WIDTH: 300px; font-size: 9pt" readonly> 『テキスト』 </TEXTAREA></span></p></form>

  • preg_match_allで取得データをDBへ

    質問:preg_match_allで取得したデータをDBへ格納したいです。 記述文 $pattern = "|HREF=.*?\>|"; preg_match_all($pattern,$str,$match); 補足: $pattern で指定範囲を書いてます。 $str には $patternでとってくる参照データ先が入ってきます。 print_r($match); で念のためブラウザに吐き出すと Array ( [0] => Array ( [0] => HREF="AAA"> [1] => HREF="../../../../Top"> 以下省略 取得したい範囲が取れていることは確認できました。 目的は、とってきた [0] => HREF="AAA"> [1] => HREF="../../../../Top"> : =>より先の文字列が、DBの1つのレコードに1つずつ入っていくイメージです。 アドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • preg_match_all 複数の文字列を取得

    preg_match_all で複数の文字列を取得したい。 正規表現について勉強している者です。 preg_match_allを使って複数の文字列を取得したいのですが、 パターンの書き方に苦戦しています。 取得したいデータは以下の5つです。 一つずつであれば、どのデータも問題なく取得できますが、 2つ以上組み合わせると、抽出した結果に余計な文字が入ったり、 何も結果を返さなかったりとなってしまいます。 皆様お知恵を貸してください。よろしくおねがいします。 ///////////取得したいデータ/////////// 1つめ→○△□○△□○日本語や英語や数字△□○△□○△□○△□ 2つめ→2010/03/04(日) 16:33:48.21 3つめ→Reg1046H2556USAsantaclala 4つめ→score995 5つめ→●▲■<br> ●▲■●日本語や英語や数字▲■●▲■●<br> ▲■●▲■●▲■●▲■●<br> ▲■●▲■●▲■ 5つめには改行が入ることもあります。 /////////////////////////////////////// HTMLコード↓ <div class="cell" material="\1"></div></div> : <span style="grey"><b>○△□○△□○△□○△□○△□○△□</span></b> DATE 2010/03/04(日) 16:33:48.21 <div class="gj"><a href="www.hoge.com" class="Reg1046H2556USAsantaclala"><span class="well">domestic</span></a><div class="hollywater" name="BUFFALO"></div></div>bridge</div><div id="score995">●▲■<br> ●▲■●▲■●▲■●<br> ▲■●▲■●▲■●▲■●<br> ▲■●▲■●▲■</div>

    • 締切済み
    • PHP
  • インラインフレームについて教えてください。

    すいません、このHTMLのどこに、タグを加えると、背景色を変えることが出来るのでしょうか?(教えてください。) </HEAD> <BODY background="a012bcg.gif"> <DIV style="width : 385px;height : 106px;top : 14px;left : 8px; position : absolute; z-index : 1; " id="Layer2"><TEXTAREA rows="6" cols="45" name="what's new">インライン</TEXTAREA></DIV> </BODY> </HTML>

  • preg_match_allの 正規表現

    <root>  <Space>    <Id>2075028953</Id>    <Depth>2</Depth>    <Title>コンテスト</Title>  </Space>  <Category>   <Count>2</Count>   <Item>     <Id>2075028959</Id>     <Title>グルメ、ドリンク</Title>   </Item>   <Item>     <Id>2075028966</Id>     <Title>音楽</Title>   </Item>  </Category>  <Site>   <Item>     <Id>2078063954</Id>     <Title>建築</Title>   </Item>  </Site> </root> のようなXMLで、preg_match_allで<category>タグの中の複数ある<item>要素のあらゆる要素を取得する正規表現を教えてください。 次の正規表現はどこが間違っていますでしょうか。 preg_match_all('@<Category>.*?(<Item>.*?<Id>(?P<id>.*?)</Id>.*?<Title>(?P<title>.*?)</Title>.*?</Item>).*?</Category>@s', $buf,$match,PREG_SET_ORDER); print_r($match); あるサンプル紹介サイトの真似をしただけでしたのでうまくいきませんでした。<category>タグ内の中身と、最初の<item>タグの中身しか取得できません。 だいたい.*?の処理の意味自体解っておりません。 恐縮ですが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • <TEXTAREA>の文字入力が自動改行されません

    私の環境はWindows8でIE11です。 実は私が作ったPerlの掲示板の<TEXTAREA>に文字入力をしようとしたら、自動改行されないのに気付きました。 ソースは、次の通りです。 <textarea name=comment cols=70 rows=12 wrap=soft style="font-size:15px"></textarea> どっかに問題があるのでしょうか? それとも、私のPCの環境のせいでしょうか? ちなみに、他のサイトの<TEXTAREA>だと私のPCでも自動改行されます。

  • textareaの幅を画面と合わせたい

    HTMLのテキストエリアで画面サイズに合わせたいのですが、 何か方法はないでしょうか。 お知恵を貸してください。 <textarea name="addtext" cols="35" rows="25"></textarea> これだと固定になってしまいます。 <textarea name="text" width=30% height=100%></textarea> イメージ的にはこんなことをしたいのです。

    • ベストアンサー
    • HTML
  • 記号()が混ざった正規表現について

    さらに、申し訳ありません。 文字列:<textarea name="sss1" cols="100" rows="12" onClick="FormName(this)">abcde</textarea><textarea name="sss2" cols="100" rows="12"></textarea> から、 abcde を抽出したく、 下記のようにコーディングしましたが、 abcde</textarea><textarea name="sss2" cols="100" rows="12"> になってしまいます。 正規表記のコーディングを教えてください。 よろしくお願いします。 <?php $a = "<textarea name=\"sss1\" cols=\"100\" rows=\"12\" onClick=\"FormName(this)\">abcde</textarea><textarea name=\"sss2\" cols=\"100\" rows=\"12\"></textarea>"; mb_ereg("<textarea name=\"sss1\" cols=\"100\" rows=\"12\" onClick=\"FormName(this)\">(.*)</textarea>",$a,$b); print "$b[1]"; ?>

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

    preg_match_allにて、次のように<img>が連続したソースから、 ※URLは全てダミーです <img src="http://a.com/a/a.jpg"><img width="10" src='http://b.com/b/b.gif' height="10"><img width="10" height="10" src='http://c.com/c/c.png"><img src=http://d.com/d/d.jpg><img src="http://e.com/hogefuga/e.jpg"> 個々のimgタグ全体と"<img~>"、 個々のsrc="~"のURLを抽出したいのですが、下記の条件でマッチさせることはできるでしょうか? 1. imgの属性位置・有無に問わず 2. 属性のくくりが、'" のどちらでも、または有無に問わず 3. src=~内に、"hogefuga"を含まないものにだけマッチ(否定形) 次のような正規表現で試したところ、 $pattern = '/<img.*?src=(\'|")?((?(?!hogefuga).)*\.(jpg|gif|png))(\'|")?.*?>/i'; 下のようにimgタグが1行づつ並んでいる場合は上手くいったのですが、連続して並んでいる場合は個々の、"<img~>"でマッチされませんでした。 ※URLは全てダミーです <img src="http://a.com/a/a.jpg"> <img width="10" src='http://b.com/b/b.gif' height="10"> <img width="10" height="10" src='http://c.com/c/c.png"> <img src=http://d.com/d/d.jpg> <img src="http://e.com/hogefuga/e.jpg"> 最終的にはsrc="~"のURLに応じて、画像をテキストリンクへ置換する、ということをしたいのですが、正規表現がよくわからず試行錯誤しています。 このような場合はどのような正規表現を書くべきなのでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • preg_match_allによる文字列切り出しについて

    preg_match_allによる文字列切り出しについて 宜しくお願い致します。 $data[0] = "あいうえおかきくけこ2011年2月3日さしすせそ"; $data[1] = "あいうえおかきくけこ2014/5/6さしすせそ"; $data[2] = "あいうえおかきくけこ2017-8-9さしすせそ"; $data[3] = "あいうえおかきくけこ2010.11.12さしすせそ"; $data[4] = "あいうえおかきくけこ13時-14時さしすせそ"; というデータから日付だけを抽出し、切った場所で配列に収めたいと考えております。 自分なりに考えたパターンは、 for($x = 0; $x < count($data); $x++) { preg_match_all("/\\d{4}[\-\/\.|年]|\\d{1,2}[\-\/\.|月]|\\d{1,2}/u",$data[$x],$data_array); print $data_array[0][0]; print $data_array[0][1]; print $data_array[0][2]; print "<br>"; } これを実行すると、下記の出力になってしまいます。 2011年2月3 2014/5/6 2017-8-9 2010.11.12 1314 ファイルの文字コードは「UTF-8」です。 最後の「1314」は$data[4]の「13時-14時」の部分が切り出されてしまい、ここは無視して欲しいのです。 この部分で数時間悩んでおり、いい加減、気持ち悪くなってきました。 またまたお願いで大変申し訳ないのですが、どなたか助けてくださいー ( iдi )

    • ベストアンサー
    • PHP

専門家に質問してみよう