PHP正規表現エラー:#が30回以上続いたら折り返すプログラムの作成

このQ&Aのポイント
  • PHPでDBから取得したテキスト中の「#」が30回以上続いた場合に折り返すプログラムを作成中ですが、条件判定がうまくいきません。ereg関数の返り値が空です。どこが問題なのでしょうか?もしくは別の方法で実現することは可能でしょうか?
  • PHPの正規表現を利用して、DBから取得したテキスト中の「#」が30回以上続いた場合に折り返すプログラムを作成しています。しかし、条件判定がうまくいかず、ereg関数の返り値が空です。問題の所在や別の方法での実現可能性について教えてください。
  • PHPでDBから取得したテキストの中に連続して出現する「#」が30回以上ある場合に、一定の長さで折り返すプログラムを作成しようとしていますが、条件判定がうまくいかず、ereg関数の返り値が空です。解決策や代替案を教えていただけますか?
回答を見る
  • ベストアンサー

PHP 正規表現

閲覧ありがとうございます。 PHPでDBから持ってきたテキストの中に"#"が30回以上続いたらそこで折り返すというプログラムを作成しています。 「#が30回以上続いたら」という条件がうまくいきません。 ereg関数の返り値には何も入っていませんでした。 どこがわるいのでしょうか? //以下ソースです。 $Foo = "##############################################################################"; if (!ereg("[:punct:]{30,}",$Foo) == FALSE) { $Foo = str_split($Foo,30); }

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>30回以上続いたら 「以上つづく」って仕様へんでしょ?30回つづいたらですね? eregはよくないらしいので、pregでやるとして 分割文字を仮に"<br>"として、こんな感じで・・・ <? $Foo = "##############################################################################"; $Foo = preg_replace("/#{30}/","$0<br>",$Foo); print $Foo; ?>

関連するQ&A

  • PHPの正規表現について

    // URLエンコード $str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $str =~ tr/ /+/; これをPHPの関数を使った方法と使わなかった方法が知りたいです。 また、正規表現で、ereg.., preg.., mb_eregがありますが、この違いの詳細が知りたいです。

    • ベストアンサー
    • PHP
  • php 正規表現で、\マークを取り除くには?

    php で ereg_replace関数を使って¥マークを取り除きたいのですが、 ereg_replace("\\", "",$str); と記述すると Warning: ereg_replace() [function.ereg-replace]: REG_EESCAPE in C:\xampp... とエラーになってしまいます。 どうすれば正規表現により円マークを取り除くことができるのでしょうか?

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

    function CheckHalfSizeKatakana($str) { $str= mb_trim(trim($str)); $pat = "^[ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲン?゛゜ゝゞー-・]+$"; if (mb_ereg_match($pat, $str)) { return true; } else { return false; } } このようにして半角カタカナをチェックしようと考えています。間違っているでしょうか?教えてください。

    • ベストアンサー
    • PHP
  • phpエラーについて

    おはようございます。 PHPにて掲示板を作成しています。 (全文は文字数制限にて掲載することができなかったため、主要な部分を掲載しております) 一通り作成した後、 ブラウザから参照したところ、 Parse error: parse error, unexpected ';', expecting '{' in /***/***.php on line 44 が出力されました。 line 44行目は「function convstr ( $str );」の行を指します。 この場合、問題となっているのは、 44行目から 57行目の間と考えてよろしいのでしょうか? もし、違っていたとするならば、どこまで追っていけばよろしいのでしょうか? また、errorに対するデバッグ手法がありましたら、 具体的な手法を教えて頂けないでしょうか? 例:printfを*行目にprint()の構文で設置する。 どうぞよろしくお願いします。 42:<?php 43: //タグ無効化等の処理をする関数 44: function convstr ( $str ); 45: { 46: //タグを無効化する 47: $str = htmlspecialchars ( $str ); 48: 49: //「'」「"」を全角に置換する 50: $str = stripslashes ( $str ); 51: $str = ereg_replace ( "'", "’", $str ); 52: $str = ereg_replace ( """, "”", $str ); 53: 54: //文字列内の改行を<br>に変換する 55: $str = ereg_replace ("\r\n|\r|\n", "<br>", $str); 56: return $str; 57: } 58: 59: //DBに接続する 60: $conn = mysql_connect ( "localhost", "root", "mysql" ); 61: if ( $conn == false ) 62: { 63: print ( "DB接続エラーです<br>\n" );

    • ベストアンサー
    • PHP
  • PHPの正規表現eregの使い方

    PHP初心者です。 eregを使った入力チェックをしたいのですが、思うように処理できません。 入力は半角英数字のみを受け付け、その他の入力の場合はエラー処理を行いたいと思ってます。 if (!ereg("^[0-9]+$", $user)) { // 半角英数字以外はエラー処理 } 参考のものがあったのでその通りやってみましたが、全角文字も受け付けてしまい困っています。 記号の意味もよくわかりません。 また、これに加え5文字以上8文字以内という条件も付けたいです。 よろしくお願い致します。

    • 締切済み
    • PHP
  • 【PHP】ereg() で文字種判定するときエラーになる

    PHP5使用者です。 ereg() でよくわからないエラーに直面して悩んでおります。 例えば、サンプル文字列が半角数字a~z又は -(ハイフン)のみで構成されているか調べたい場合、以下の方法を試しました。 1)if( ereg("^[\-a-z]+$", $str )){ 2)if( ereg("^[a-z-]+$", $str )){ 3)if( mb_ereg("^[\-a-z]+$", $str )){ 4)if( preg_match("/^[\-a-z]+$/", $str )){ 但し $str はシングルバイト文字です 結果、1)のみエラーになります。-をエスケープしているのになぜでしょうか? 文字コードはShift_JIS、EUC-JP、UTF-8とも試しましたが同じでした。そもそも常にマルチバイト関数を使うべきとか…? 解説していただける方、よろしくお願いいたします。

    • 締切済み
    • PHP
  • JavaScriptで日付の正規表現の方法

    お世話になっております。たびたびすみません。。 昨日、教わった正規表現の仕方(XX-XXXXXXX-XXXXX X=1-9)はよくわかったのですが、その方法を真似て 2004/02/02 12:00 みたいな日付が正しいかどうかチェックするスクリプトを考えてみたのですが、エラーがでてうまく動きません。 str=document.FORM.TEXT.value; if(str != ""){ if(! str.match(/^[0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}$/)){ window.alert("ERR"); document.FORM.TEXT.focus(); return(false); } } 形式は (YYYY/MM/DD hh:mm)です。 まったくわかりません・・・すみませんが、よろしくお願いいたします。

  • php5.3.3でeregをループ内で使用すると

    php5.3.3でeregをループ内で使用すると動作がとまり、エラーログにも何も出力されません。 10回目のループでなぜか動作がとまるようです。 $mail=""; $fp=fopen("php://stdin", "r"); while(!feof($fp)) $mail.=fread($fp, 10240); fclose($fp); $MailArray = explode("\n", $mail); $Counter = 0; $InputCheck = new InputCheck(); for ($i = 0; $i < count($MailArray); $i++){ if (strpos($MailArray[$i], "From: ") === 0){ $From = str_replace("From: ", "", $MailArray[$i]); $From = ereg_replace(">.*$", "", $From); $From = ereg_replace("^.*<", "", $From); $From = ereg_replace("\r", NULL, $From); if(!$InputCheck->isRightEMail($From)){ $i++; $From = str_replace("From: ", "", $MailArray[$i]); $From = ereg_replace(">.*$", "", $From); $From = ereg_replace("^.*<", "", $From); $From = ereg_replace("\r", NULL, $From); } } else if (strpos($MailArray[$i], "To: ") === 0){ $To = str_replace("To: ", "", $MailArray[$i]); $To = ereg_replace(">.*$", "", $To); $To = ereg_replace("^.*<", "", $To); $To = ereg_replace("\r", NULL, $To); if(!$InputCheck->isRightEMail($To)){ $i++; $To = str_replace("To: ", "", $MailArray[$i]); $To = ereg_replace(">.*$", "", $To); $To = ereg_replace("^.*<", "", $To); $To = ereg_replace("\r", NULL, $To); } } } 上記は空メールされたfromとtoを取得するものです。 eregをpregに変えれば問題なく動作します。 5.3以降からeregは非推奨になりましたが、使用することはできるようですが、ループ内で使用するとなぜか動作がそこでストップします。 非推奨の関数を使用すると動作が止まりエラーログにも出力されないことはよくあるのでしょうか? エラーログに出力されなかったため原因を特定するのに苦労しました。 eregなどの非推奨関数を使用した場合の不具合に関してご教示頂けると幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP5で正規表現を使った文字の取り出しが上手くいきません。

    PHP5で正規表現を使った文字の取り出しが上手くいきません。 こんばんは、教えて!goo初投稿させて頂きます。 PHP5で学内の事務情報を管理するスクリプトを組んでいます。 学籍番号から入学年度・学部・名簿番号を取り出したいのですが、狙った通りに上手く動いてくれません。 POSTで渡された テキスト内に含まれた7桁の学籍番号「0708068」(2:2:3桁区切りで入学年度・学部・名簿番号)をマッチングさせる為に、正規表現「\d{2}\d{2}\d{3}」で 配列 $regs に返し、 $regs[0] => 07 $regs[1] => 08 $regs[2] => 068 のような感じで戻ってくる事を想定しています。 手元の書籍、ネットのリファレンスで確認しても問題点が解りません。 何が間違っているのか、ご指摘お願いします。 //上手く動いてくれないコード $text = "私の学籍番号は0708068番です。"; if(ereg("\d{2}\d{2}\d{3}",$text,$regs)){ echo "true.\n"; echo ($regs[0]."\n".$regs[1]."\n".$regs[2]."\n"); }else{ echo "false.\n"; //いつもfalseが帰ってきてしまう。 }

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

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

    • ベストアンサー
    • PHP