javascript、phpについて


下記のjavascriptのコードを、phpではどう書けばよいか教えて下さい。
var str2 = str.replace(/(<a.*?<\/a>)|(ここ)/g, function(a,b,c) {return b ? b : '<strong>'+c+'</strong>';}) ;

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/06/18 06:38:00
  • 終了:2012/06/18 17:58:13

ベストアンサー

id:TransFreeBSD No.1

TransFreeBSD回答回数651ベストアンサー獲得回数2622012/06/18 08:30:50

ポイント70pt

修飾子eを使います。置換文字列は後方参照を解決した後、evalされます。
http://ideone.com/7RFQp
http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php

id:worldtravel

ありがとうございました。
希望通りに動きました。

追加の条件がありましたので、こちらで改めて質問させて頂きました。
http://q.hatena.ne.jp/1340009813

2012/06/18 17:57:45

その他の回答(1件)

id:TransFreeBSD No.1

TransFreeBSD回答回数651ベストアンサー獲得回数2622012/06/18 08:30:50ここでベストアンサー

ポイント70pt

修飾子eを使います。置換文字列は後方参照を解決した後、evalされます。
http://ideone.com/7RFQp
http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php

id:worldtravel

ありがとうございました。
希望通りに動きました。

追加の条件がありましたので、こちらで改めて質問させて頂きました。
http://q.hatena.ne.jp/1340009813

2012/06/18 17:57:45
id:y-kawaz No.2

y-kawaz回答回数1419ベストアンサー獲得回数2252012/06/18 11:43:29

ポイント30pt

preg_replace_callbackを使えば良いです。

<?php
$str = "ほげ<a>リンク</a>、ここです。\n";

// php-5.3以上ならクロージャが使えるので以下のように書けます(php-5.3未満だと文法エラー)
$str2 = preg_replace_callback('/(<a.*?<\/a>)|(ここ)/', function($m) {
  return $m[1] ? $m[1] : $m[2];
}, $str);
echo $str2;


// php-5.3未満の場合、その1(関数を作っておき名前で指定)
function func($m) {
  return $m[1] ? $m[1] : $m[2];
}
$str2 = preg_replace_callback('/(<a.*?<\/a>)|(ここ)/', 'func', $str);
echo $str2;


// php-5.3未満の場合、その2(無名関数を利用)
$str2 = preg_replace_callback('/(<a.*?<\/a>)|(ここ)/', create_function('$m', 'return $m[1] ? $m[1] : $m[2];'), $str);
echo $str2;

ただこの例だと、Cherenkovさんのコメントの指摘のように preg_replace('/ここ/', '<strong>$1</strong>', $str) で良いですよね?
まぁ多分、例が悪かっただけで趣旨はコールバック関数での置換方法だと思いますが。

id:worldtravel

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

2012/06/18 17:57:52
  • id:Cherenkov
    str変数はどんな感じですか?
    正規表現は/(ここ)/gだけでいいように見えるのですが。
  • id:TransFreeBSD
    <a>ここ</a>の場合にstrongを付けたくないのだと思います。
  • id:y-kawaz
    なるほど!
  • id:worldtravel
    すみません。
    以前ここでjavascriptを教えて頂きました。
    http://q.hatena.ne.jp/1266999992

    TransFreeBSDさんの仰るとおり、aタグに囲まれた範囲内は置き換えたくないのです。

    それと、今更ながら気が付いたのですが、imgタグのalt属性の値も置き換わると困ります。

    質問に付け足しで申し訳ございませんが上手い方法を教えて下さい。

    実際はaタグのリンクに変更したいのです。
    var str2 = str.replace(/(<a.*?<\/a>)|(ここ)/g, function(a,b,c) {return b ? b : '<a href="xxx">'+c+'</a>';}) ;

    お願い致します。
  • id:worldtravel
    すみません。

    改めて質問し直させて頂きました。
    http://q.hatena.ne.jp/1340009813

    ぜひ、こちらにご回答下さい。
    よろしくお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません