2011-05-29 15 views
8

मैं रेगुलर एक्सप्रेशन के लिए निम्न टोकन का सामना किया है: [\s\S]*?[ s S] * के बीच क्या अंतर है? तथा ।*?

यदि मैं यह सही ढंग से समझ, चरित्र वर्ग का अर्थ है "एक खाली स्थान के चरित्र या एक गैर-सफ़ेद चरित्र से मेल खाते हैं।" इसलिए, यह .*?

एक संभावित अंतर यह है कि आमतौर पर . न्यूलाइन से मेल नहीं खाता है। हालांकि, यह नियमित अभिव्यक्ति रूबी में लिखी गई थी और m modifier पारित किया गया था जिसका अर्थ है कि . वास्तव में, न्यूलाइन से मेल खाता है।

वहाँ .*?

के बजाय [\s\S]*? का उपयोग करने के मामले में यह मदद करता है में किसी भी अन्य कारण है, नियमित अभिव्यक्ति मैं देख रहा हूँ लाइन 97 पर HEADER_PATTERN निरंतर में sprockets library अंदर प्रकट होता है पूर्ण अभिव्यक्ति है:

/ 
    \A \s* (
    (\/\* ([\s\S]*?) \*\/) | 
    (\#\#\# ([\s\S]*?) \#\#\#) | 
    (\/\/ ([^\n]*) \n?)+ | 
    (\# ([^\n]*) \n?)+ 
) 
/mx 
+0

मैं आपकी अटकलें साझा करता हूं। शायद, यह मदद कर सकता है अगर आप हमें पूरे regxp या संदर्भ का उपयोग करते हैं जिसमें इसका उपयोग किया जाता है। – sawa

+0

@sawa यह एक अच्छा विचार है, धन्यवाद। मैंने अपना प्रश्न संपादित कर लिया है। –

+0

रेगेक्स जोड़ने के लिए धन्यवाद। अब, यह और भी अजीब लग रहा है क्योंकि यह 'm' का उपयोग कर रहा है, और' [^ \ n] 'का उपयोग करके इसका निपटारा करने के लिए तैयार है। – sawa

उत्तर

6

आपने रेगेक्स को सही ढंग से व्याख्या की है।

ऐसा लगता है कि एम-फ्लैग (या अन्य कार्यान्वयन में एस-फ्लैग) का समर्थन नहीं करने वाली अन्य भाषाओं से संबंधित है।

उस निर्माण का उपयोग करने का एक कारण एम-फ्लैग का उपयोग नहीं करना होगा ताकि आपके पास उपयोग करने की संभावना हो। न्यूलाइन से मेल खाने के बिना, लेकिन यदि आवश्यक हो तो भी सब कुछ मैच कर सकते हैं।

+0

यह एक अच्छा विचार है और एक संभावित उपयोग केस –

+6

यह सही जवाब हो सकता है। हालांकि, रूबी के इस उद्देश्य के लिए एक संकेत है: '(? एम:।)'। यह 'm' मोड में 're'' मोड में 'm' मोड में रखेगा। जो भी मूल रेगेक्स का इस्तेमाल करता है वह अच्छा कोडिंग नहीं कर रहा है। – sawa

+0

@sawa मैं दोनों बयानों से सहमत हूं – marsbear

0

एम ध्वज के साथ, वे .* को छोड़कर बहुत स्पष्ट और बनाए रखने के लिए समान होंगे।

0

न्यूलाइन चीज एकमात्र अंतर है। शायद किसी ने सोचा कि एम संदर्भ को जानने के बिना पढ़ना आसान था, या चाहते थे कि वह उस संदर्भ में बदलाव के खिलाफ मजबूत हो।

मैंने [^]* को इसी तरह के उद्देश्य के लिए उपयोग किया है।

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