2011-11-24 9 views
7

के भीतर दिए गए खोज स्ट्रिंग के आस-पास के शब्दों की एक्स संख्या निकालें, मैं खोज में किसी दिए गए शब्द के दोनों तरफ शब्दों की एक्स संख्या निकालने का एक तरीका ढूंढ रहा हूं।एक स्ट्रिंग

उदाहरण के लिए, यदि कोई उपयोगकर्ता खोज शब्द के रूप में "कैदी" में प्रवेश करता है और MySQL क्वेरी उस पोस्ट को पाती है जिसमें पोस्ट की सामग्री में "कैदी" होता है, तो मैं पोस्ट की पूरी सामग्री को वापस नहीं करना चाहता लेकिन उपयोगकर्ता को पोस्ट के बारे में जानकारी देने के लिए बस इसके दोनों तरफ शब्दों की संख्या x और फिर वे तय कर सकते हैं कि वे पोस्ट पर जारी रखना चाहते हैं और इसे पूरी तरह से पढ़ना चाहते हैं।

मैं PHP का उपयोग कर रहा हूं।

धन्यवाद!

+0

यह भी आपकी मदद कर सकता है: http://stackoverflow.com/q/1436582/1066234 –

उत्तर

8

आप शायद इस समस्या को regex के साथ हल करने में सक्षम नहीं हो सकते हैं। वहाँ शब्दों के बीच अन्य पात्रों के भी कई संभावनाएं हैं ...

लेकिन आप इस regex की कोशिश कर सकते हैं:

((?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5}) 

यहाँ देखें: rubular

तुम भी वे के रूप में कुछ पात्रों बहिष्कृत करना चाहेंगे शब्दों के रूप में गिना जाता है। अभी रेगेक्स स्पेस के रूप में घिरे हुए गैर-स्पेस वर्णों के किसी अनुक्रम की गणना करता है।

मिलान करने के लिए केवल वास्तविक शब्द:।

((?:\w+\s*){0,5}<search word>(?:\s*\w+){0,5}) 

लेकिन यहाँ किसी भी गैर शब्द चरित्र (।, "आदि) ब्रेक मिलान

तो तुम पर जा सकते हैं ...

((?:[\w"',.-]+\s*){0,5}["',.-]?<search word>["',.-]?(?:\s*[\w"',.-]+){0,5}) 

यह आपके खोज शब्द के चारों ओर से एक शब्द के साथ 5 शब्द भी मेल खाता है।

php में इसका इस्तेमाल करने के लिए:

$sourcestring="For example, if a user enters \"inmate\" as a search word and the MySQL"; 
preg_match_all('/(?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5}/s',$sourcestring,$matches); 
echo $matches[0][0]; // you might have more matches, they will be in $matches[0][x] 
+0

morja के जवाब देने के लिए जोड़ने के लिए, आप PHP के preg_match के साथ MySQL से स्ट्रिंग का चयन कर सकता है: http://php.net/manual/en/function.preg-match.php। – bozdoz

+0

धन्यवाद, जब मैं आज बाद में मौका प्राप्त करता हूं तो मैं इन्हें आजमाऊंगा। मैं उस समय की सराहना करता हूं जिसे आपने जवाब देने के लिए लिया होगा! –

+0

मैंने इसे आजमाया है, यह कभी-कभी रूबुलर पर काम करता है ... हमम ... मैंने इसे PHP में लागू करने की कोशिश की है और मैं अपने सिर को इसके चारों ओर लपेट नहीं सकता ... क्या कोई मुझे सही दिशा में इंगित कर सकता है? –

1

मैं जो भी खाते

'~(?:[\p{L}\p{N}\']+[^\p{L}\p{N}\']+){0,5}<search word>(?:[^\p{L}\p{N}\']+[\p{L}\p{N}\']+){0,5}~u' 

में UTF8 वर्ण लेता है इस मामले में php के लिए इस regex का उपयोग होता है '~' सीमांकक और modificator है अंत में 'आप' रेगेक्स की पहचान करता है यूटीएफ 8 का अर्थ है।

कृपया यूनिकोड Regex पहचानकर्ता के बारे में प्रलेखन यहाँ देखें:

http://www.regular-expressions.info/refunicode.html