• ベストアンサー

preg_replaceがうまくできない

<br />を\nに置き換えてやりたいと思っています。 $a = preg_replace("<br\s/>", "\n", $a); としたのですが、 変換前が あ<br />い 変換後が あ< >い となりました。 <>が括っているものとしてとられているようでしたので、次のように\でエスケープしてみました。 $a = preg_replace("\<br\s/\>", "\n", $a); そうしたら変換後は何も出てきませんでした。(データがなかった) そこで $a = preg_replace("/<br\s\/>/", "\n", $a); としてみたのですが、変換前と変わりませんでした \sを普通に半角スペースにもしてみましたし、括っているダブルクオーテーションをシングルクオーテーションに変えてもみましたが、結果は同じでした。 <br />全体を\nに変換するにはどうすればいいでしょうか。

  • choei
  • お礼率63% (286/451)
  • PHP
  • 回答数2
  • ありがとう数3

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

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

preg処理をするときにはきちんとデリミターを指定しましょう $pattern="/<br(\s+\/)?>/i"; $replacement="\n"; $html=preg_replace($pattern,$replacement,$html);

choei
質問者

お礼

解決しました。 ありがとうございました。

その他の回答 (1)

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

最後の >$a = preg_replace("/<br\s\/>/", "\n", $a); でいいです。どこかに勘違いがないか確認しましょう。 正規表現を使わないのなら、str_replaceを使ってもいいと思いますが。

choei
質問者

お礼

早速の回答ありがとうございます。 もう一度やってみたのですが、やっぱり変化ありません $a = preg_replace("/br\s\//","\n",$a); で試してみましたが、予想通り<や>が残った状態で変換されました。 どうしても<>を含めるとうまくいきません。 補足ですが、この変換元としている<br />は元々nl2br関数で変換したものなのですが、これが何か関係あるのでしょうか。

関連するQ&A

  • preg_replaceの使い方が分からないのですが

    $z=" abcd !00! ouafd \n !00! af \n "; $z=preg_replace("/\s/g",'',$z); $z=preg_replace("/!00!.*$/",'',$z); によってabcdを出そうとしたのですができません どうしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • PHPのpreg_replaceについて

    文字列に半角、全角があったら''に置換したいです。 例)あ あ あ -> あああ 上記のように。 ソースは下記のとおりしてみたのですがうまく表示されませんでした。 $string = 'あ あ あ'; $pattern = '[ \t\n\r\f]'; $replacement = ''; $var_dump(preg_replace($pattern,$replacement, $string)); 他には $string = 'あ あ あ'; $pattern = '[[:space:]]'; $replacement = ''; $var_dump(preg_replace($pattern,$replacement, $string)); などと行ってみました。 ご教授お願いいたします。

    • 締切済み
    • PHP
  • preg_replaceでの警告

    PHP5.2.4を使用しています。 CakePHPというフレームワークの中の関数で、次のような Warning (2): preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 6 という警告がでるのですが、preg_replace関数の第4引数を指定してないからなのかな?と思い、 1という数字を指定してみたりしたのですが、同じような警告が出てしまいます・・・ たぶんバージョン間の違いだと思いますが、 この場合は、たとえば警告を出さないフラグを変更する以外に preg_replace関数をどのように記述すれば良いのでしょうか? function slug($string, $replacement = '_') { if(!class_exists('String')) { require_once LIBS . 'string.php'; } $map = array( '/a|a|a|a/' => 'a', '/e|e|e|?|e/' => 'e', '/i|i|i/' => 'i', '/o|o|o|o/' => 'o', '/u|u|?|u/' => 'u', '/c/' => 'c', '/n/' => 'n', '/a|a/' => 'ae', '/o/' => 'oe', '/u/' => 'ue', '/A/' => 'Ae', '/U/' => 'Ue', '/O/' => 'Oe', '/s/' => 'ss', '/[^\w\s]/' => ' ', '/\\s+/' => $replacement, String::insert('/^[:replacement]+|[:replacement]+$/', array('replacement' => preg_quote($replacement, '/'))) => '', ); /* print "string=$string<br>\n"; print_r(array_keys($map)); print_r(array_values($map)); */ $string = preg_replace(array_keys($map), array_values($map), $string); return $string; } string=test<br> Array ( [0] => /a|a|a|a/ [1] => /e|e|e|?|e/ [2] => /i|i|i/ [3] => /o|o|o|o/ [4] => /u|u|?|u/ [5] => /c/ [6] => /n/ [7] => /a|a/ [8] => /o/ [9] => /u/ [10] => /A/ [11] => /U/ [12] => /O/ [13] => /s/ [14] => /[^\w\s]/ [15] => /\s+/ [16] => /^[_]+|[_]+$/ ) Array ( [0] => a [1] => e [2] => i [3] => o [4] => u [5] => c [6] => n [7] => ae [8] => oe [9] => ue [10] => Ae [11] => Ue [12] => Oe [13] => ss [14] => [15] => _ [16] => )

    • 締切済み
    • PHP
  • phpの<br>\nと\nとエスケープシーケンスについて

    現在、phpを学んでいるのですが、いきなり"<br>\n"と"\n"の違いがわからなくて困っています。\nはエスケープシーケンスで改行を意味するのですよね?<br>も改行を意味するから・・・わざわざダブルクォーテーションの中に<br>を書かなくても良いのでは・・・ と思うのですが・・・違うのでしょうか!? またエスケープシーケンスについてなのですが、 ¥を付けて表す特殊文字がエスケープシーケンスなのですね。 しかし、シングルクォーテーション内では「¥’」と「\\」だけが使える。 ダブルクォーテーション内では記述すると画面に表示されないということですが・・・。 ではエスケープシーケンスっていつ使うのですか?使い道がないような気がするのですが・・・・。 使えるのは、シングルクォーテーション内の「¥’」と「\\」だけになるのでは・・・・。 そのへんのところを教えてください。

    • ベストアンサー
    • PHP
  • 正規表現でpreg_系を使ってタグ内は置き換えないようにする方法

    正規表現でpreg_系を使って、半角スペースを&nbsp;に置き換える処理をしたのですが、タグ内のスペースも&nbs;に置き換わってしましました。 タグ内は置き換えないようにするにはどのようにしたら良いでしょうか? データは複数行渡っています。以下はタグが置き換わるので、逆にタグでないものを置き換えたいです。 <?php function test_call($matches){ return str_replace(" ","&nbsp;",$matches[0]); } $data = <<< EOT この横は変換 します。 <a href="http://www.yahoo.co.jp/" target="_blank">タグの半角スペースは変換せず、 この横は変換する。 </a> このタグも変換してはいけません。< br/> EOT; $data = preg_replace_callback('/<("[^"]*"|\'[^\']*\'|[^>])*>[ ]?/', "test_call", $data); var_dump($data); ?>

    • ベストアンサー
    • PHP
  • preg_replace ereg_replace

    いつもお世話になっております。 データを抽出する前にサニタイズが必要となり、 実行する処理で、 $rep = "/\\\/"; $arr = array('data1' => 'A', 'data2' => '\\\\\\'); $ret = preg_replace($rep , "\\\\\\" ,$arr ); $ret = ereg_replace("'", "\'" ,$ret); preg_replaceは配列で戻ってくる事は知っているのですが、 ereg_replaceは配列で戻ってくるのでしょうか。 お手数ですが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • preg_replace 英数字以外の文字の前後のスペースを削除

    preg_replaceで 英数字の前後いずれかのスペースは残して それ以外のスペースを消したいのですが あ a間が消えてしまいます。(英数字前なので消さない) a aはのこるので英数字後のスペースは残せてます。 <?php $str = \"あ a a\"; $txt = preg_replace(\"/([^a-zA-Z\\d])\\s+/u\", \"$1\", $str); echo $txt;

    • ベストアンサー
    • PHP
  • preg_matchを使って文字の書式をチェック

    いつもお世話になっております。 PHP初心者です。 preg_matchを使って文字の書式をチェックしたいのですが文字の書式が 12.3 x 45.6 x 78.9 [{数字(0~99.9)}{半角スペース}{エックス}{半角スペース}数字(0~99.9){半角スペース}{エックス}{半角スペース}{数字(0~99.9)} のような書式かどうかチェックするにはどうしたらよいですか? これは物のサイズだと思ってください。単位は[cm]です。 以下の感じで作ってみましたがダメでした。 if (!preg_match("/^[0.1-99.9]\s{1}\x\s{1}[0.1-99.9]\s{1}\x\s{1}[0.1-99.9]$/", $_POST['size'])) { $error['size'] = 'no'; } よろしくお願いします。

    • ベストアンサー
    • PHP
  • 空行を<br />に置換したい

    今、ファイルの中身を読み込み、それを処理したいものがあります。 処理する過程で、 空行(スペース、タブしかない行も含む)を<br />に置換したいのですが、上手くいきません。 ex) 処理前 あいうえお ←半角スペース2個あると過程 か きくけこ さしせそ 処理後 あいうえお <br /> か <br /> きくけこ <br /> さしすせそ 現在、やってるスクリプトです。 $str = preg_replace("/^\s$/", "<br />", $str); これだと出来ません・・・。 (このままだと<br />に置換するとその行が改行され ませんでしたね><;) どうすると実現出来ますでしょうか?ご教示下さい。

    • ベストアンサー
    • PHP
  • reg_replace関数の使い方

    reg_replace( "\n","<br>", $rec['body'] ); として、テキストエリア内の改行をhtmlタグの<br>に変換して、 他のページに送って表示させたいのですが、 改行ではなく、半角スペースが入ってしまいます。 原因が判らず困っております。 お詳しい方がおられましたら教えてください。 よろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう