perl - Parsing HTML-attributes like strings -


key1 = "value1 value2" key2 = "va3" <पी>

एचटीएमएल गुणों की तरह तार हैं

 Key4   

होआ पाने के लिए इस तरह की स्ट्रिंग की आवश्यकता है:

  $ parse = {key1 '= & gt; ['Value1', 'value2'], कुंजी 2 = & gt; ['val3'], # या key2 = & gt; 'val3' कोई फर्क नहीं पड़ता .. key4 = & gt; Undef;};   

फ़ंक्शन स्वयं बनाना, जैसे:

  #! / Usr / bin / env perl का प्रयोग 5.014; सख्त उपयोग; चेतावनियों का उपयोग करें; डेटा का उपयोग करें: Dumper; जबकि (& lt; डेटा & gt;) {my $ parsed; chomp; अगले अगर m / \ ए \ s * # /; जबकि ($ 4) {my @ $ ($ 4) {my @ $} = (* / =) * (\ s * = \ s * (["']) (। *?) (\ 3))? / g) {my $ k = $ 1; V = split (/ \ s + /, $ 4); $ parseed- & gt; {$ k} = \ @v;} अन्य {$ parseed- & gt; {$ k} = अंडफ;}} कहते हैं Dumper $ parse;} __DATA__ Key1 = "value1 value2" key2 key3 = "val3" key1 = 'value1' मान 2 '' key8 key3 = 'val3' key1 = 'मान 1 i \' m 'key2 key3 = "val3" key1 =' मान 1 मान 2 'key8 key3 = Val3   

पहले 2 लाइनों के लिए सही परिणाम काम करता है और प्रिंट करता है।

  $ VAR1 = {'key1' = & gt; ['value1', 'value2 '' ['मान 1', '' मान 2 ''], 'कुंजी 3' = '[' वैल 1 '],' कुंजी 3 '],' कुंजी 2 '= & gt; undef; दुर्भाग्यवश, यह तीसरी पंक्ति पर विफल हो जाता है - बच निकलने वाले उद्धरणों को कैसे संभालना है इसका पता नहीं है ( '' ['val3'], 'key8' = & gt; undef;   

> और बस key = val (बिना उद्धरण) मान्य है) की तुलना में पता लगाया गया है))

इसके अतिरिक्त, क्योंकि फिर से पहिये को फिर से नहीं करना चाहते हैं, शायद इसके लिए सीपीएएन पर कुछ मॉड्यूल मौजूद हैं, केवल क्या खोजना है संपादित करें

@ एमपीपीक ने एक मॉड्यूल का सुझाव दिया है, जो "असाइनमेंट" के आरएचएस भाग को पार्स करने में काफी मदद कर सकता है। मेरी समस्या से स्ट्रिंग में एक से अधिक स्थान सीमांकित LHS = RHS है, जहां आरएचएस (एकल और डबल में) उद्धृत किया जा सकता है या उद्धृत नहीं किया गया है (एक मान के मामले में) और आरएचएस मूल्य (में उद्धरण चिह्नों) अंतरिक्ष भी सीमांकित है ..

  key1 = "value1 value2" key2 = "va3" key4 key5 = val5 key6 = 'val6' key7 = 'val x \' y zzz ' / code>  

इसलिए मुझे नहीं पता कि स्ट्रिंग को कई कोड में कैसे तोड़ सकता है, क्योंकि भागों को विभाजित नहीं किया जा सकता है और इसका उपयोग नहीं किया जा सकता मेरे रेगेक्स , क्योंकि यह बच गए कोट्स में विफल रहता है (हो सकता है कि कुछ अधिक जटिल रिजक्स जो पलायन करता है, वह काम कर सकता है)।

कोई भी सुझाव, कृपया?

आप mpapec के रूप में उपयोग कर सकते हैं:

  सख्त का उपयोग करें; चेतावनियों का उपयोग करें; 5.010 का उपयोग करें; डेटा का उपयोग करें: Dumper; टेक्स्ट का उपयोग करें: ParseWords; $ डेटा :: डम्पर :: सॉर्ट कीइज़ = 1; मेरी $ स्ट्रिंग = q {key1 = "value1 value2" key2 = "va3" key4 key5 = val5 key6 = 'val6' key7 = 'val x \' y zzz '}; मेरा @words = शेलवर्ड $ स्ट्रिंग; मेरा% पार्स किया गया; अपने $ शब्द (@words) को प्राथमिकता दें {मेरी ($ कुंजी, $ मान) = विभाजित / = /, $ शब्द, 2; $ पार्स किया गया {$ key} // = []; धक्का @ {$ पार्सेड {$ की}}, $ _ $ shellwords $ मान; } प्रिंट डम्पर \% पार्स किया गया;   

आउटपुट:
  $ VAR1 = {'key1' = & gt; ['मान 1', 'मान 2'], 'कुंजी 2' = & gt; ['वीए 3'], 'कुंजी 4' = & gt; [], 'कुंजी 5' = & gt; ['val5'], 'कुंजी 6' = & gt; ['val6'], 'कुंजी 7' = & gt; ['वैल', 'एक्स' वाई ',' ज़ज़ ']};   

ध्यान रखें कि निरंतरता के लिए, मैंने कोई भी मान बिना undef के रिक्त सरणी के बिना कुंजियों को सौंपा। मुझे लगता है कि इससे डेटा संरचना का उपयोग करना आसान होगा।

यह भी ध्यान रखें कि मैंने shellwords को दो बार बुलाया मैंने बचपन के उद्धरण चिह्नों से बैकस्लैश निकालने के लिए ऐसा किया, जिससे कि

  key7 = 'val x \' y zzz '     val x'y zzz   

के बजाय में विभाजित हो < प्री क्लास = "लैंग-नोवोन्ट प्रिंटिंग-ओवरराइड"> val x \ 'y zzz

(आउटपुट में x \' y में बैकस्लैश ऊपर डेटा :: डम्पर द्वारा जोड़ा गया है, चर में कोई बैकस्लैश नहीं है।)

Comments

Popular posts from this blog

php - PDO bindParam() fatal error -

logging - How can I log both the Request.InputStream and Response.OutputStream traffic in my ASP.NET MVC3 Application for specific Actions? -

java - Why my included JSP file won't get processed correctly? -