2016-09-09 1 views
0

ich versuche, alle Hashtags in meinem String zu erhalten und arbeiten gut, aber zuerst Hashtags meinen Code nicht finden:PHP My Regex nicht finden kann Erste Hashtags

$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); 

See Bild (Alle Hashtag ist in Ordnung, nur erste nicht):

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

ich brauche Beispiel, wenn meine Verbindung ich habe nicht wollen, hashtag in Verbindung zu finden:

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

verwenden '„“$ string);.' Weil Ihr REGEX passt nur, wenn ein Raum gegeben wird, aber die erste hashtag hat, bevor es keinen Raum – JustOnUnderMillions

+0

Die Regex erfordert speziell ein Leerzeichen vorangehenden '#' , die dein erstes '# q' nicht hat. –

+0

"Es funktioniert an meinem Ende" – Joachim

Antwort

1

Es gibt keinen Raum vor dem ersten Hashtag ... versuchen Sie dies:

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

Das Sternchen bedeutet, dass der Raum da sein kann null oder mehr Male.

1

Sie wahrscheinlich die \ s optional wie so ..

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

Es ist leichter verständlich machen möchten, wenn das (\ s) durch die in Klammern gefolgt ist? Das ist ein Modifikator, um dem Regex zu sagen, dass das (\ s) optional ist.

Sie können es so ohne die Klammern tun, die unordentlicher aber für die Regexmaschine besser aussieht.

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

Ich hätte erwähnt, dass Regex101 ist hervorragend, wenn Sie mit Regex spielen wollen, sieht Ihre Regex wie folgt https://regex101.com/r/nA2hB2/1 –