How can I get multiple memories from a Perl regex match? -
regex खोज का उद्देश्य सी ++ हेडर फाइलों से सभी टेम्पलेट क्लास इंस्टेंसेस निर्धारित करना है। वर्ग के उदाहरणों का प्रारूप तैयार किया जा सकता है जैसे:
सीएम-क्लास & lt; int & gt; myClassInstance; CMyClass2 & LT; Int, int & gt; myClass2Instacen; संपूर्ण स्ट्रिंग में फ़ाइल लोड करके खोज की जाती है:
खुले (फ़ाइल, $ फ़ाइल); $ String = join ('', & lt; FILE & gt;); करीब (फ़ाइल); और निम्नलिखित regex वर्ग उदाहरणों को निर्धारित करने के लिए उपयोग किया जाता है भले ही क्लास आवृत्ति स्ट्रिंग में और एक पंक्ति को और अधिक व्याप्त करती है:
$ search_string = " । \ s * \ w [^ typename] * & LT; (\ s * \ w \ s *, \ n?) *) & gt;। \ s * \ w + * "; $ स्ट्रिंग = ~ m / $ search_string /; समस्या ये है कि खोज केवल एक ही हिट देता है भले ही फाइल में अधिक क्लास इंस्टेंस मौजूद हो।
क्या इस रीजक्स बैकरेरिएंस चर में से एक से इस दृष्टिकोण के उपयोग से सभी हिट प्राप्त करना संभव है?
सबसे पहले, अगर आप गलती फ़ाइलों में जा रहे हैं, तो आपको उपयोग करना चाहिए। तब आप ऐसा कर सकते हैं:
मेरी $ सामग्री = read_file $ file; read_file त्रुटि पर चिल्लट जाएगा।
दूसरा, [^ typename] केवल 'typename' स्ट्रिंग को बाहर नहीं करता है, लेकिन उन अक्षरों में से कोई भी स्ट्रिंग शामिल है। इसके अलावा, यह मेरे लिए स्पष्ट नहीं है कि जिस पद्धति पर आप उपयोग करते हैं वह उन चीजों से मेल खाएगा जिनकी आप इसे मैच चाहते हैं, लेकिन मैं अभी उस पर टिप्पणी नहीं कर सकता।
अंत में, सभी फ़ाइल में एक-एक करके मैच, एक लूप में जी संशोधक का उपयोग करें:
my $ source = '3 5 7'; जबकि ($ स्रोत = ~ / ([0- 9]) / g) {प्रिंट "$ 1 \ n"; } अब जब मुझे आपके पैटर्न को देखने का मौका मिला है, मुझे अब भी यकीन नहीं है कि [^ typename] को क्या बनाना है, लेकिन यह एक ऐसा उदाहरण कार्यक्रम है जो भाग को कैप्चर करता है कोण कोष्ठक के बीच (जैसा कि आप ऊपर कब्जा कर रहे हैं केवल एक चीज होने लगता है):
सख्त का उपयोग करें; चेतावनियों का उपयोग करें; फ़ाइल का उपयोग करें :: Slurp; मेरे $ पैटर्न = qr {^ \ w + & lt; \ s * ((?: \ W + (?:, \ S *)?) +) \ S * & gt; \ S * \ w + \ s *; } Mx; मेरी $ source = read_file \ * डेटा; जबकि ($ source = ~ / $ pattern / g) {my $ match = $ 1; $ मैच = ~ s / \ s + / / g; प्रिंट "$ मैच \ n"; } __DATA__ CMyClass & lt; int & gt; myClassInstance; CMyClass2 & LT; Int, int & gt; myClass2Instacen; C: \ अस्थायी & gt; मेरे $ pattern = qr {^ (\ w + टी)
अब, मुझे संदेह है कि आप निम्नलिखित को पसंद करेंगे I & Lt; \ s * (?: \ W + (?:, \ S *)?) + \ S * & gt; \ s * \ w +) \ s *; } Mx;
जो उपज:
सी: \ अस्थायी & gt; टी.पी.एल. सीएमआईक्लास & lt; int & gt; MyClassInstance CMyClass2 & lt; Int, int & gt; MyClass2Instacen
Comments
Post a Comment