Php per sostituire @nomeutente con collegamento all'account Twitter

Presumo che questo abbia a che fare con la regex, ma è un'arte tutta sua – e ho bisogno di aiuto.

Quando visualizziamo una storia, memorizziamo tutto il text in maniera visualizzabile – diciamo $ story.

Quello che mi piacerebbe è fare uno str_replace (penso sia quello di cui ho bisogno) che dice qualcosa del tipo "Se il text contiene @qualcosa poi trasformalo in un link come <a href="http://www.twitter.com/something">@something</a> – ma fai questo solo se non c'è niente prima del simbolo @" (per escludere gli indirizzi email)

Inoltre, dovremmo interrompere il 'qualcosa' se c'è uno spazio o una punteggiatura dopo di esso. così che @qualcosa. non si trasforma in <a href="http://www.twitter.com/something.">@something.</a>

Qualche suggerimento su come farlo funzionare?

 $input = preg_replace('/(^|\s)@([a-z0-9_]+)/i', '$1<a href="http://www.twitter.com/$2">@$2</a>', $input); 

Guardalo

Corrisponde a un @ preceduto da spazi bianchi o nulla (quando si trova all'inizio).

Può anche essere cortocircuitato utilizzando lookbehind positivo come:

 $input = preg_replace('/(?<=^|\s)@([a-z0-9_]+)/i', '<a href="http://www.twitter.com/$1">@$1</a>', $input); 

Che corrisponde solo al nome di twitter ma solo se prima c'è spazio o niente.

Uno sguardo positivo potrebbe fare il trucco:

 preg_replace('/(?<=\s)@(.*?)/', '<a href="....com/$1">@$1</a>') 

andando fuori di testa. "Se c'è un @ che è preceduto da qualcosa che è uno spazio bianco, prendi ciò che segue dopo il simbolo @ e fai il tag html".