0 レビュー
4 回答
regex-PHP単語をpreg_replaceに置き換えます
preg_replace()関数で置き換えられた単語を取得するにはどうすればよいですか。
preg_replace('/[@]+([A-Za-z0-9-_]+)/', '<a href="/$1" target="_blank">$0</a>', $post );
$1
変数を取得して、さらに使用できるようにします。
わからない
0
レビュー
答え :
解決策:
式を置き換える前にキャプチャしてください:
// This is where the match will be kept
$matches = array();
$pattern = '/[@]+([A-Za-z0-9-_]+)/';
// Check if there are matches and capture the user (first group)
if (preg_match($pattern, $post, $matches)) {
// First match is the user
$user = $matches[1];
// Do the replace
preg_replace($pattern, '<a href="/$1" target="_blank">$0</a>', $post );
}
わからない
0
レビュー
答え :
解決策:
これは、 preg_replace()
では不可能です。これは、完成した文字列/配列を返しますが、置き換えられたフレーズは保持しないためです。 preg_replace_callback()
を使用して手動でこれを実現できます。
$pattern = '/[@]+([A-Za-z0-9-_]+)/';
$subject = '@jurgemaister foo @hynner';
$tokens = array();
$result = preg_replace_callback(
$pattern,
function($matches) use(&$tokens) {
$tokens[] = $matches[1];
return '<a href="/'.$matches[1].'" target="_blank">'.$matches[0].'</a>';
},
$subject
);
echo $result;
// <a href="/jurgemaister" target="_blank">@jurgemaister</a> foo <a href="/hynner" target="_blank">@hynner</a>
print_r($tokens);
// Array
// (
// [0] => jurgemaister
// [1] => hynner
// )
わからない
0
レビュー
答え :
解決策:
preg_replaceに加えてpreg_matchを使用する必要があります。 preg_replaceは単に置き換えるためのものです。
$regex = '/[@]+([A-Za-z0-9-_]+)/';
preg_match($regex, $post, $matches);
preg_replace($regex, '<a href="/$1" target="_blank">$0</a>', $post );
わからない
0
レビュー
答え :
解決策:
preg_replaceでは実行できませんが、 preg_replace_callback では実行できます:
preg_replace_callback($regex, function($matches){
notify_user($matches[1]);
return "<a href='/$matches[1]' target='_blank'>$matches[0]</a>";
}, $post);
notify_user
を、ユーザーに通知するために呼び出すものに置き換えます。
これを変更して、ユーザーが存在するかどうかを確認し、有効なメンションのみを置き換えることもできます。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。