0

この正規表現パターンは私を混乱させます。

@tom変数に保存されているようなユーザー名があります。@tom文字列のどこかに見つかったときに一致するパターンを設定したいと思います。始まり、中間、または終わり。

私の目標は、一致させてから、彼のプロフィール ページへのリンクに置き換えることです。理解できたと思いますが、単語の終わりを認識していません。探しているときのように、私が望んでいないものと@tomも一致します。@tommy

これが私がこれまでに持っているものです:

$pattern = array();
$pattern[0] = '/'.$possible1.'/i';

$replacement = array();
$replacement[0] = '$1<a href="http://banterme.com/'.$possible1user.'">@'.$possible1user.'</a>';

echo preg_replace($pattern, $replacement, $text);

配列を使用するのは、1 つだけではなく、テキスト内のすべての @ に一致させたい (例: @tom は @inga と一致する) ためです。実際のコードを単純化して、配列の一部のみを表示しました。

更新:基本的に、私は'/'.$possible1.'/i'(たとえば)@tomに一致しないものを把握しようとしてい@tommyます。

4

3 に答える 3

3

これで十分ですか?/(?!\w)\@tom(?!\w)/?
私はちょうど境界を追加しました..

上記のコメントとして@HamZa DzCyber​​DeVによって与えられたものは短いです/\@tom(?!\w)/

ここで確認できます:

http://www.spaweditor.com/scripts/regex/index.php

データを次のように@tom @tomato @atom @tom

戻ります @tomato @atom

于 2013-04-30T21:56:46.390 に答える
1

なぜ str_replace を使用しないのですか?

str_replace ("@tom" , "<a href='/users/tom'>@tom</a>" , $text);

これには正規表現が必要なようには思えません。

于 2013-04-30T21:36:53.043 に答える