1

preg_replace に問題があります。リンク内の言及を変更しますが、名前はユーザー名ではありません。名前にスペースがあるので、良い解決策を見つけましたが、それを行う方法がわかりません。preg_replaceとの間にある単語@,

例えば:

@John Doeh, @Jenna Diamond, @Sir Duck Norman

そしてに置き換えます

<a href="user.php?name=VAL">VAL</a>

どうすればいいのですか?

4

3 に答える 3

1

@Some Name,私の仮定に基づいて、次のようなテキストで始まる文字列を削除したいと考えています@Some Name, this is a message

href次に、それを次のように置き換えます。<a href="user.php?name=First_Name">First_Name</a>

その場合、次の正規表現が機能します。

$str = '@First_Name, say something';
echo preg_replace ( '/@([[:alnum:]\-_ ]+),.*/', '<a href="user.php?name=$1">$1</a>', $str );

出力します:

<a href="user.php?name=First_Name">First_Name</a>

数字、アンダースコア、ダッシュのサポートも追加しました。それらは名前でも有効ですか?@User Name?で有効なその他の文字。それらは知っておくべき重要なことです。

于 2013-03-11T09:14:58.480 に答える
1

私はあなたがそれを次のようにしたいと思います:

<a href="user.php?name=John Doeh">John Doeh</a>

この試みのために:

$myString="@John Doeh, @Jenna Diamond, @Sir Duck Norman";
foreach(explode(',',$myString) as $str)
{
    if (preg_match("/\\s/", $str)) {
        $val=str_replace("@","",trim($str));
        echo "<a href='user.php?name=".$val."'>".$val."</a>";
        // there are spaces
    }
}
于 2013-03-11T09:19:51.923 に答える
0

2 つの方法:

<?php

// preg_replace method
$string = '@John Doeh, @Jenna Diamond, @Sir Duck Norman';
$result = preg_replace('/@([\w\s]+),?/', '<a href="user.php?name=$1">$1</a>', $string);
echo $result . "<br>\n";

// explode method
$arr = explode(',', $string);
$result2 = '';
foreach($arr as $name){
    $name = trim($name, '@ ');
    $result2 .= '<a href="user.php?name='.$name.'">'.$name.'</a> ';
}
echo $result2;

?>
于 2013-03-11T09:39:03.723 に答える