2016-09-09 11 views
0

を見つけることができません:PHP私の正規表現私は私のコードは、それを見つけることができません、私の文字列内のすべてのハッシュタグを取得し、罰金が、最初のハッシュタグを仕事にしようと最初にハッシュタグ

$string = '#q #q #q #q #q #q #q #q #q #q #q #q #q #q #q'; 

$hashtag_url = $weburl. "hashtag/\\0"; 
$string = preg_replace("(\s#\w+)", "<a href='$hashtag_url'>\\0</a>", $string); 

参照イメージ(すべてのハッシュタグは、OKです初回のみではない):

http://i.stack.imgur.com/v5buk.png

私のリンクは、私がリンクにハッシュタグを検索したくない持っている場合、私は例が必要になります。

http://localhost/#gasd3 #qtest (get only #qtest) 
+0

使用この '、「」$ string)は、。あなたの正規表現はスペースが与えられている場合にのみ一致しますが、最初のハッシュタグが – JustOnUnderMillions

+0

の前にスペースがないので、'正規表現は、具体的には、 '#の'の前にスペース文字が必要ですあなたの最初の '#q'は持っていません。 –

+0

"それは私の最後に働く" – Joachim

答えて

1

最初のハッシュタグの前にスペースはありません...これを試してみてください。

preg_replace("/(\s*#\w+)/i", "<a href='$hashtag_url'>\\0</a>", $string); 

アスタリスクはスペースが0回以上が存在する可能性があることを意味します。

1

あなたは、おそらくそれはとき(\ s)は理解することは簡単です

$string = preg_replace("((\s)?#\w+)", "<a href='$hashtag_url'>\\0</a>", $string); 

.. \ sのオプションのようにようにしたいが続く括弧でいるのですか? (\ s)がオプションであることを正規表現に伝えるための修飾語です。

ブラケットが不要なので、より扱いにくく見えるが、正規表現エンジンには適している。

$string = preg_replace("(\s?#\w+)", "<a href='$hashtag_url'>\\0</a>", $string); 
+0

正規表現で遊びたいならregex101が優れていると言わざるを得ないが、あなたの正規表現はこのように見える。https://regex101.com/r/nA2hB2/1 –

関連する問題