0

機能しません。関数を呼び出すと、$1 の値が失われます。

echo preg_replace('"\b(http://\S+)"', '<a href="$1">'.findTopDomain('$1').'</a>', $text);

正常に動作し、出力: stackoverflow.com

echo preg_replace('"\b(http://\S+)"', '<a href="$1">'.findTopDomain('http://stackoverflow.com/questions/ask').'</a>' , $text);

$1 値を preg_replace 内から関数に送信する必要があります。私は何を間違っていますか?

4

2 に答える 2

2

置換式が実行されるようにe修飾子を設定する必要があります。

preg_replace('"\b(http://\S+)"e', '"<a href=\\"$1\\">".findTopDomain("$1")."</a>"', $text)

置換は、有効な PHP 式でなければならないことに注意してください。この場合、式は次のように評価されます。

"<a href=\"$1\">".findTopDomain("$1")."</a>"

そして、少なくとも次のように出力をエスケープすることを忘れないでくださいhtmlspecialchars:

preg_replace('"\b(http://\S+)"e', '"<a href=\\"".htmlspecialchars("$1")."\\">".htmlspecialchars(findTopDomain("$1"))."</a>"', $text)
于 2009-12-20T16:31:52.217 に答える
2

お探しphp_replace_callback()ですか?

コールバックを使用して正規表現の検索と置換を実行する

于 2009-12-20T16:31:53.380 に答える