2011-10-05 11 views
6

मैं खोज परिणामों को उजागर करने के कोड का उपयोग कर रहा नीचे के साथ हाइलाइट खोज resuls:स्ट्रिंग हिस्सा

$text = preg_replace("/\b($word)\b/i", '<span class="highlight_word">\1</span>', $text); 

और उसके काम कर ठीक।

लेकिन preg_replace पूरे स्ट्रिंग को वापस कर देता है और मेल खाने वाले शब्दों को हाइलाइट करता है।

मुझे स्ट्रिंग का हिस्सा और केवल पूरी स्ट्रिंग प्राप्त करने की आवश्यकता है।

एक परिदृश्य पहले मैच के बाद 100 अक्षर और 100 वर्ण प्राप्त करना है। किसी भी तरह की सहायता को आभार समझेंगे।

उत्तर

8

आप 100 अक्षरों से पहले और बाद चाहते हैं तो फिर \1<span class="highlight_word">\2</span>\3

और पूरी तरह करने के लिए अपने प्रतिस्थापन बदल तो बस /^.*?(.{0,100})\b($word)\b(.{0,100}).*?$/i

-/\b($word)\b/i से अपने रेगुलर एक्सप्रेशन से बदलने के लिए: $text = preg_replace("/^.*?(.{0,100})\b($word)\b(.{0,100}).*?$/i", '\1<span class="highlight_word">\2</span>\3', $text);

संपादित करें: पोस्टर के बाद अपडेट किया गया टिप्पणी। ऐसा करना चाहिए जो आप चाहते हैं।

संपादित 2: यदि किसी भी तरफ 100 वर्ण नहीं थे तो रेगेक्स विफल हो जाएगा। इस पर ध्यान दिए बिना कि शब्द के पहले/बाद में 100 अक्षर हैं या नहीं। यदि 100 से कम वर्ण हैं तो यह उन सभी से मेल खाएगा।

संपादित 3: पोस्टर टिप्पणी के बाद अद्यतन उत्तर।

+0

इस संशोधन के साथ यह सभी स्ट्रिंग को हाइलाइट करता है लेकिन मैं केवल $ शब्द को हाइलाइट करना चाहता हूं और 100 से पहले और बाद में हाइलाइट करना चाहता हूं। आपकी प्रतिक्रिया के लिए धन्यवाद – ntan

+0

आप जो चाहते थे उसे बेहतर फिट करने के लिए मूल उत्तर अपडेट किया गया। – jmlsteele

+0

यह केवल $ शब्द को हाइलाइट करता है लेकिन पूरा पाठ देता है। यह 100 से पहले और बाद में वापस नहीं आता है। मैं यह देखने के लिए {0,1} भी बदलता हूं कि अभी भी पूरा हो जाता है लेकिन फिर भी पूरे $ टेक्स्ट – ntan

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