2015-02-20 10 views
19

बस रूबी में नियमित अभिव्यक्ति डीबग करने का प्रयास कर रहा है। जब मैं नियमित अभिव्यक्ति की सामग्री दिखाता हूं, तो यह नियमित विस्तार की शुरुआत में ?-mix दिखाता है, भले ही वे वर्ण अभिव्यक्ति का हिस्सा न हों। कृपया देखें देखने के लिए निम्नलिखित आईआरबी उत्पादन इसरूबी नियमित अभिव्यक्ति में '? -mix' क्या है

irb(main):028:0* EXPR = /^a$/ 
=> /^a$/ 
irb(main):029:0> EXPR 
=> /^a$/ 
irb(main):030:0> puts EXPR 
(?-mix:^a$) 
=> nil 

सचित्र के रूप में आप देख सकते हैं, जब आप कहते हैं का उपयोग बाहर एक नियमित अभिव्यक्ति की सामग्री को मुद्रित करने के लिए, वहाँ शुरुआत में ?-mix है। क्या मुझे इससे चिंतित होना चाहिए? यह कहां से आ रहा है?

उत्तर

26

mix अंग्रेजी शब्द मिश्रण नहीं है, यह Regexp का विकल्प है।

Regexp#to_s देखें:

एक स्ट्रिंग नियमित अभिव्यक्ति और उसके विकल्प ((?opts:source) अंकन का उपयोग युक्त रिटर्न

अपने उदाहरण में, mबहु मोड, i के लिए है। केस असंवेदनशील, और xविस्तारित मोड के लिए है। डैश चालू होने से पहले विकल्प, बाद में बंद हैं (डिफ़ॉल्ट)। प्रश्न का उदाहरण, ?-mix, में सभी विकल्प बंद हैं। - यह झंडे के लिए एक वाक्य रचना है के बारे में

puts /^a$/mix 
# =>(?mix:^a$) 
+0

महान, इसके लिए धन्यवाद। वह एम विकल्प हो सकता है जो मेरे reg ex को खराब कर रहा है। इसे – Zephilim

+0

के बजाय इसे एकल लाइन पर सेट करने के लिए बाहर निकलने की आवश्यकता है, यह ध्यान देने योग्य हो सकता है कि '-' उन विकल्पों को बंद कर देता है * बंद * (जो वे डिफ़ॉल्ट रूप से होते हैं, लेकिन आप उन्हें विभिन्न अनुभागों के लिए चालू और बंद कर सकते हैं रेगेक्स, यदि आपका रेगेक्स स्वाद इसका समर्थन करता है)। –

+0

@ शंताराम: क्या आप जानते हैं कि रुबी का '(? एम)' हर दूसरे रेगेक्स स्वाद के '(एस)' विकल्प के समान है? आप '^' और '$' से मिलान करने की क्या उम्मीद कर रहे हैं? –

10

:

आप की तरह उन्हें चालू कर सकते हैं। डैश से पहले जो लोग हैं, और बाद में बंद हैं।

Regexp docs में expalined रूप में, यह एक इनलाइन संशोधक है, (?on-off) सिंटैक्स का उपयोग:

एक regexp के लिए अंत सीमांकक एक या अधिक एकल अक्षर विकल्पों के द्वारा पीछा किया जा सकता है जो नियंत्रित करती हैं कि पैटर्न कर सकते हैं मैच।

  • /pat/i - पर ध्यान न दें मामले
  • /pat/m - एक चरित्र से .
  • /pat/x मिलान के रूप में एक नई पंक्ति दावत - पैटर्न
  • /pat/o में खाली स्थान के और टिप्पणियों पर ध्यान न दें - केवल एक बार #{} प्रक्षेप प्रदर्शन करना

i, m, और x भी अभिव्यक्ति कोष्ठकों से घिरा के लिए बंद (?on-off) निर्माण है, जो विकल्प पर सक्षम बनाता है के साथ उपसूचक स्तर पर लागू किया जा सकता है और अक्षम कर देता है विकल्प।

इसलिए, मेरे मामले में यह विकल्प m, i का मतलब है, और x बंद कर रहे हैं और कोई भी कर रहे हैं।

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