2011-01-22 7 views
7

मुझे लगता है कि यह रेगेक्स के साथ कुछ करने के लिए है, लेकिन यह एक कला है जो स्वयं है - और मुझे कुछ मदद चाहिए।ट्विटर खाते से लिंक के साथ @username को प्रतिस्थापित करने के लिए PHP

जब हम एक कहानी प्रदर्शित करते हैं, तो हम सभी पाठ को एक varilable में स्टोर करते हैं - मान लें $ कहानी।

मुझे क्या चाहिए एक स्ट्र_रेप्लेस करना है (मुझे लगता है कि मुझे यही चाहिए) जो कुछ ऐसा कहता है "यदि पाठ में कुछ है तो उसे <a href="http://www.twitter.com/something">@something</a> जैसे लिंक में बदल दें - लेकिन केवल कुछ भी नहीं होने पर ऐसा करें @ प्रतीक "से पहले (ईमेल पते को बाहर करने के लिए)

इसके अलावा, अगर इसके बाद कोई स्थान या विराम चिह्न हो तो हमें 'कुछ' को रोकने की आवश्यकता होगी। ताकि @ कुछ। <a href="http://www.twitter.com/something.">@something.</a>

इस काम को कैसे करें इस पर कोई सुझाव नहीं है?

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

मेरे सिर के ऊपर से जा रहा:

उत्तर

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

See it

यह एक @ जो खाली स्थान या कुछ भी नहीं से पहले किया जाता है से मेल खाता है (यह शुरुआत में हो)।

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

कौन सा केवल चहचहाना नाम से मेल खाता है, लेकिन अंतरिक्ष या कुछ भी नहीं है कि इससे पहले कि वहाँ केवल यदि:

यह भी रूप में सकारात्मक lookbehind का उपयोग कर शॉर्ट जा सकता है।

+0

धन्यवाद! पूरी तरह से काम किया। – Andelas

+0

दूसरा तर्क (दूसरे उदाहरण के लिए) '$1' होना चाहिए। – BudgieInWA

+0

अरे, मैं रेगेक्स सीख रहा हूं और यह उदाहरण मेरे लिए बहुत उपयोगी है। मुझे लगभग पहले उदाहरण मिलते हैं, लेकिन यह समझ में नहीं आता कि पहले पैटर्न के अंत में/i क्या है। किसी को समझाने की परवाह है? –

6

एक सकारात्मक lookbehind चाल कर सकता है। "अगर कोई ऐसा @ है जो व्हाइटस्पेस से पहले होता है, तो @ के बाद जो कुछ भी चलता है और एचटीएमएल टैग रैपिंग करें"।

+1

ठीक है, आप रेगेक्स में '।' के बजाय '[a-z0-9 _-]' चाहते हैं, है ना? चूंकि ट्विटर नाम में विशेष वर्ण या रिक्त स्थान नहीं हो सकते हैं (जो आपका रेगेक्स अभी उठाएगा। वास्तव में, यह स्ट्रिंग के अंत तक खा जाएगा) ... – ircmaxell

+0

जब कोई ट्विटर नाम सही होता है तो विफल रहता है इससे पहले एक अंतरिक्ष के बिना शुरू। – codaddict

+0

यह "@" प्रतीक ढूंढ रहा है, और एक लिंक बना रहा है - लेकिन URL के बाद या जो प्रदर्शित होता है, उसके बाद वाले पाठ का उपयोग नहीं करता है। तो मैं जो देखता हूं वह है @ ' – Andelas

संबंधित मुद्दे