चूंकि MySQL बैक-रेफरेंसिंग कैप्चरिंग समूहों का समर्थन नहीं करता है, इसलिए (\w).*\1
का विशिष्ट समाधान काम नहीं करेगा। इसका मतलब यह है कि दिए गए किसी भी समाधान के लिए सभी संभावित युगलों की गणना करने की आवश्यकता होगी। इसके अलावा, जहां तक मैं बता सकता हूं कि बैक-रेफरेंस आगे-पीछे या लुक-बैक में मान्य नहीं हैं, और आगे-पीछे और लुक-बैक MySQL में समर्थित नहीं हैं।
हालाँकि, आप इसे दो भावों में विभाजित कर सकते हैं, और निम्न क्वेरी का उपयोग कर सकते हैं:
SELECT * FROM words
WHERE word REGEXP '^[SEPIAN]{1,6}$'
AND NOT word REGEXP 'S.*?S|E.*?E|P.*?P|I.*?I|A.*?A|N.*?N'
बहुत सुंदर नहीं है, लेकिन यह काम करता है और यह काफी कुशल भी होना चाहिए।
दोहराए गए वर्णों की एक निर्धारित सीमा का समर्थन करने के लिए, अपनी द्वितीयक अभिव्यक्ति के लिए निम्न पैटर्न का उपयोग करें:
A(.*?A){X,}
जहां A
आपका चरित्र है और X
कितनी बार इसकी अनुमति है।
तो अगर आप एक और N
जोड़ रहे हैं आपकी स्ट्रिंग SEPIANN
. के लिए (कुल 2 N
. के लिए s), आपकी क्वेरी बन जाएगी:
SELECT * FROM words
WHERE word REGEXP '^[SEPIAN]{1,7}$'
AND NOT word REGEXP 'S.*?S|E.*?E|P.*?P|I.*?I|A.*?A|N(.*?N){2}'