आप आर, जी, बी कब्जा करने के लिए विभिन्न उपसमूहों में, ताकि आप उन्हें (match-string group)
का उपयोग कर निकाल सकते हैं चाहते हैं, आप की जरूरत है किसी बिंदु पर आपके regexp में तीन अलग-अलग कोष्ठक समूह होने के लिए।
\(...\)\(...\)\(...\)
अन्यथा, यदि आप के रूप में
\(...\)\{3\}
पुनरावृत्ति पैटर्न इस तरह का उपयोग आप केवल एक समूह है, और मैच के बाद यह केवल अंतिम मैच का मूल्य शामिल होंगे। तो, कहते हैं, आप
\([[:xdigit:]]\{2\}\)\{3\}
की तर्ज पर कुछ ऐसा "A0B1C2" एक स्ट्रिंग से मेल खाएगा, लेकिन (match-string 1)
केवल आखिरी मैच में यानी "सी 2" की सामग्री को शामिल होंगे है, क्योंकि regexp परिभाषित करता है केवल एक समूह
इस प्रकार आपके मूल रूप से दो विकल्प होते हैं: एक कॉम्पैक्ट रेगेक्सपी का उपयोग करें, जैसे कि आपका तीसरा, लेकिन हेन संख्या को निकालने के लिए कुछ और सबस्ट्रिंग प्रोसेसिंग करें, जैसा कि सीन सुझाव देता है, या अधिक जटिल रेगेक्सप का उपयोग करें, जैसे आपका पहला, जो आपको तीन उप-मैचों को अधिक आसानी से एक्सेस करने देता है।
आप ज्यादातर कोड पठनीयता बारे में चिंतित हैं, तो आप हमेशा tripleee के सुझाव के अनुसार, एक हद तक कम अनावश्यक तरह से इस तरह के एक अधिक जटिल regexp के निर्माण के लिए
(let ((hex2 "\\([[:xdigit:]]\\{2\\}\\)"))
(concat "#" hex2 hex2 hex2))
की तरह कुछ कर सकता है।
आप ऐसा क्यों करना चाहते हैं? पठनीयता के लिए? – Thomas
बस जिज्ञासा: मुझे आश्चर्य है कि regexps दोहराए गए पैटर्न से मेल खा सकता है या नहीं। – Elena
समस्या यह है कि आप तब 3 अलग-अलग समूहों को संदर्भित नहीं कर पाएंगे, है ना? तो आप आर, जी, बी मूल्यों को अलग से कैसे निकालेंगे? – Thomas