5

私はphpを使用preg_replace()して、ハッシュタグ記号が前に付いている単語をハイパーリンクに変換しています。

したがって、次のよう#austinになります:<a href="/tag/austin">#austin</a>

これが私の正規表現です。

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', $text);

私の問題は、大文字の文字がある場合、href 値はそれらを保持しますが、href 値を常に完全に小文字にしたいということです。

入力:#Austin
ならない: なる必要があり<a href="/tag/Austin">#Austin</a>
ます:<a href="/tag/austin">#Austin</a>

正規表現を変更してこれらの結果を作成するにはどうすればよいですか?

4

4 に答える 4

5

preg_replace_callback@failN によって提案された使用例を次に示します。

デモリンク

$string = '#Austin';

function hashtag_to_link($matches)
{
  return '<a href="/tag/' . strtolower($matches[1]) . '">' . $matches[0] . '</a>';
}

echo preg_replace_callback('/\B#(\w*[a-z_]+\w*)/i', 'hashtag_to_link', $string);

// output: <a href="/tag/austin">#Austin</a>
于 2011-06-27T16:55:12.630 に答える
4

これを試して:

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', strtolower($text));

これにより、正規表現がテストされる前に、件名($text)が小文字になります。

于 2011-06-27T16:28:05.920 に答える
2

あなたはそれを達成することができます:http preg_replace_callback//de2.php.net/manual/en/function.preg-replace-callback.php

于 2011-06-27T16:26:50.157 に答える
1

理論e的には、置換文字列で PHP 関数を使用できる修飾子を使用できます。

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/e', "'<a href=\"/tag/'.strtolower('$1').'\">$0</a>'", $text);
于 2011-06-27T17:01:14.977 に答える