2010-06-22 17 views
6

उदाहरण के लिए मैं एक MySQL डेटाबेस तालिका फ़ील्डएक पंक्ति

में नीचे पैरा है में दो बार दोहराए शब्द देखते हैं अगर पता लगाने के लिए कैसे "काटने एक खगोलीय वस्तु वस्तु की रोशनी से दूर, के ग्रहण में के रूप में चंद्रमा, जब पृथ्वी "

" ऑब्जेक्ट "पंक्ति में दो बार दिखाई देता है (एक दूसरे के बगल में)।

मैं यह जांचना चाहता हूं कि यह मामला एक ही तालिका में अन्य रिकॉर्ड में दिखाई देता है या नहीं। वहाँ एक आसान तरीका तालिका से यह PHP और MySQL

+1

बस एक संकेत। आप नियमित अभिव्यक्तियों के साथ या तो MySQL या PHP में ऐसा कर सकते हैं। –

+0

मुझे preg_match "/ \ b (\ w +) \ s + \ 1 \ b /" के लिए पैटर्न मिला जो वास्तव में जिस तरह से काम करता था। मेरी मदद करने के लिए सभी को धन्यवाद .. – daron

उत्तर

-1

चुनें * का उपयोग कर ऐसा करने के लिए जहां क्षेत्र regexp 'खोज' शब्द का

पंक्तियों को उचित पद शामिल लौट जाएगा।

+0

मुझे preg_match "/ \ b (\ w +) \ s + \ 1 \ b /" के लिए पैटर्न मिला जो वास्तव में जिस तरह से काम करता था। मेरी मदद करने के लिए सभी को धन्यवाद .. – daron

1
if (preg_match('/\\b(\\w+)\\s\\1\\b/', $subject)) { 
    //has repetition 
} 
+1

मुझे preg_match "/ \ b (\ w +) \ s + \ 1 \ b /" के लिए पैटर्न मिला जो वास्तव में जिस तरह से काम करता था। मेरी मदद करने के लिए सभी को धन्यवाद .. – daron

-1

क्या

के बारे में
SELECT * FROM yourtable WHERE yourfield LIKE "%yourword%%yourword%" 
स्थानीय होस्ट पर मेरा व्रत testcase में

, यह काम किया।

+0

भले ही यह संभवतः काम करेगा, मैं इसे बड़ी टेबल पर उपयोग करने की सिफारिश नहीं करता !!और बीच में एक ही% पर्याप्त होना चाहिए! – Phliplip

+0

मुझे – daron

+0

देखने के लिए शब्दों को नहीं पता है मुझे preg_match "/ \ b (\ w +) \ s + \ 1 \ b /" के लिए पैटर्न मिला है जो वास्तव में जिस तरह से काम करता था। मेरी मदद करने के लिए सभी को धन्यवाद .. – daron

0

आप अपने उद्देश्यों के लिए निम्नलिखित regex का उपयोग कर सकते हैं:

(\b\w+)(?:\s+\1)+ 

या

\b(\w+)(?:\s+\1)+ 

यह शब्दों के बीच खाली स्थान के के किसी भी राशि के साथ, दोहराए गए शब्दों के किसी भी संख्या से मेल खाएगी।

ध्यान दें कि, MySQL या PHP regex इंजन कैसे काम करता है (जो भी आप उपयोग करते हैं) के आधार पर, बैकस्लाश (और संभवतः ब्रांड्स) से बचने की आवश्यकता हो सकती है, और आपको रेगेक्स इंजन के किसी भी delimiters का उपयोग करने की आवश्यकता होगी पैटर्न के लिए उपयोग करता है। (हालांकि अगर MySQL मैट स्टेटस के रूप में बैकरेफर को अनुमति नहीं देता है, तो आपको इसके लिए PHP का उपयोग करना होगा।)

संपादित करें: शब्द सीमा जांच के साथ अपडेट किया गया; यह नहीं पता था कि \w preg पैटर्न के लिए स्वचालित रूप से शब्द सीमा जांच नहीं करता है।

+0

मुझे preg_match "/ \ b (\ w +) \ s + \ 1 \ b /" के लिए पैटर्न मिला जो वास्तव में जिस तरह से काम करता था। मेरी मदद करने के लिए सभी को धन्यवाद .. – daron

1

इस regex काम करता है: (\b\w+\b)(?=\s?\1) (example देखें)

यह MySQL में काम करने के लिए, शब्द सीमाओं (\b) [[:alnum:]] साथ MySQL बराबर [[:<:]] और [[:>:]], और \w के साथ प्रतिस्थापित किया जाना चाहिए:

SELECT * FROM your_table 
WHERE your_field REGEXP '([[:<:]][[:alnum:]]+[[:>:]])(?=\\s?\\1)'; 

लेकिन यह क्वेरी एक त्रुटि देती है, क्योंकि मैट ने कहा, MySQL does not support backreferences। तो, वर्तमान MySQL REGEXP के साथ यह संभव नहीं है।

+0

मुझे preg_match "/ \ b (\ w +) \ s + \ 1 \ b /" के लिए पैटर्न मिला जो वास्तव में जिस तरह से काम करता था। मेरी मदद करने के लिए सभी को धन्यवाद .. – daron

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