1

私は次のものを持っています:

preg_replace('/\B@[^\B ]+/', '<a href="profile.php">$0</a>');

@スペースで始まりスペースで終わる文字列をチェックし、それをリンクに変換します。

今私が必要としているのは@、文字列から記号を削除する別の preg_replace を作成する@helloことhelloです。

最初の preg_replace のリンクを に変更できるようにするために、これが必要<a href="profile.php?user=hello>$0</a>です。

助けてください!

4

2 に答える 2

3

パターンの一部を () で囲んで新しい変数を作成することができます。この場合、$1 変数の下に @ のない一致文字列があります

preg_replace('/\B@([^\B ]+)/', '<a href="profile.php?profile=$1">$0</a>');

実施例

于 2013-11-06T23:46:10.447 に答える
1

( )キャプチャするパターンの周りにキャプチャ グループを使用して、キャプチャれた一致と文字列全体を分離できます。次に、キャプチャした一致$1を希望する場所に配置し、$0文字列全体の一致にアクセスするために使用できます。

preg_replace('/\B@(\S+)/', '<a href="profile.php?profile=$1">$0</a>', $str);

\S代わりにここを使用できます。\B否定された文字クラス内で使用することはお勧めしません。

正規表現:

\B            the boundary between two word chars (\w) 
              or two non-word chars (\W)
 @            '@'
\S+           non-whitespace (all but \n, \r, \t, \f, and " ") (1 or more times)

を参照してくださいworking demo

于 2013-11-06T23:55:24.597 に答える