2009-06-07 17 views
8

मुझे नियमित अभिव्यक्ति (PHP के preg_match() के लिए उपयुक्त) लिखने में परेशानी हो रही है जो कि < मान > चाहे इस पर ध्यान दिए बिना कीवर्ड = 'मान' जोड़े को पार्स करेगी स्ट्रिंग एकल या डबल कोट्स में संलग्न है। निम्न दोनों स्थितियों के में IOW मैं < नाम > और < मूल्य > जहां < मूल्य > स्ट्रिंग, कोट की गैर संलग्न प्रकार हो सकती है प्राप्त करने की आवश्यकता:सिंगल या डबल कोट्स के साथ कीवर्ड = 'वैल्यू' को पार्स करने के लिए regex की आवश्यकता है

name="value" 
name='value' 

उत्तर

14

पर्ल में यह एक रेगुलर एक्सप्रेशन है कि काम करेगा। यह पहली बार लाइन की शुरुआत के लिए मेल खाता था, फिर एक या अधिक गैर = वर्णों के लिए मेल खाता है और उन्हें $ 1 पर सेट करता है। अगला यह = के लिए तो के लिए मिलान के विकल्प के साथ एक गैर कोष्ठकों लग "या 'और उस के लिए $ 2 सेट।

/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/ 

अगर आप की तरह खाली भाव मिलान करने के लिए यह करना चाहता था।

यह =" "

बदलें पिछले दो + एक * के साथ नहीं तो यह काम करना चाहिए

संपादित टिप्पणी में उल्लेख किया है। डौग इस्तेमाल किया ...

/^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/ 

यह इनपुट या मूल्य के ईथर अंत पर एक वैकल्पिक सफेद स्थान से मेल खाता है और उसने लाइन मार्कर के अंत को हटा दिया है।

+2

इसे name = 'एक डबल उद्धरण के साथ asd "से मेल खाएगा और, कि सही नहीं है –

+1

अब से मेल खाता है गैर मिलान बोली सेट – Copas

+0

अरे तुम मेरी प्रतिक्रिया करने से पहले इसे अद्यतन:।।! पी –

4
/^(\w+?)=(['"])(\w+?)\2$/ 

कौन सा $1 में महत्वपूर्ण और $3 में मूल्य स्थापित करेंगे।

(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2 

यह एकल या डबल कोट से मेल होगा, को ध्यान में रखकर:

1

कुछ साल देर से, लेकिन जब से इस सवाल का अत्यधिक गूगल पर स्थान दिया गया है, और जवाब मेरी जरूरतों को पूरा नहीं किया था, यहाँ एक और expression है खाता उद्धरण, और unquoted मूल्य से बच निकला।

name = bar 
name = "bar" 
name = 'bar' 
name = "\"ba\"r\"" 

यह, हालांकि, अगर एक मूल्य के अगले मुख्य/मान जोड़े से कुंजी याद आ रही है पढ़ने के लिए है कि में एक सीमा है। इसे कुंजी/मूल्य जोड़े के comma separated list का उपयोग करके संबोधित किया जा सकता है।

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