2015-05-15 10 views
5

मेरे पास "कैन्यन सेंट/27 वें वे" जैसे वाक्यांशों वाली एक फ़ाइल है जिसे मैं रूबी नियमित अभिव्यक्तियों के साथ "कैन्यन सेंट और 27 वें मार्ग" में बदलने की कोशिश कर रहा हूं।रूबी नियमित अभिव्यक्तियों में वास्तव में क्या मतलब है?

मैंने मैच बनाने के लिए file = file.gsub(/(\b) \/ (\b)/, "#{$1} and #{$2}") का उपयोग किया, लेकिन मैं थोड़ा सा मतलब हूं कि \ b वास्तव में क्या मतलब है और क्यों $ 1 में स्लैश से पहले शब्द सीमा से पहले सभी वर्ण शामिल हैं और क्यों $ 2 के बाद सभी पात्र शामिल हैं शब्द सीमा अगले शब्द से शुरू होती है।

आमतौर पर, मुझे उम्मीद है कि जो भी नियमित अभिव्यक्ति में कोष्ठक में है, वह $ 1 और $ 2 में होगा, लेकिन मुझे यकीन नहीं है कि एक शब्द सीमा के चारों ओर कोष्ठक वास्तव में क्या मतलब होगा क्योंकि शब्द शब्द से संक्रमण के बीच वास्तव में कुछ भी नहीं है एक सफेद अंतरिक्ष चरित्र के लिए।

+0

'/' –

+0

पर विभाजित करने के लिए .split() फ़ंक्शन का उपयोग करें इस लाइन से पहले कोई अन्य रेगेक्स मैच है? –

+0

ऐसी कई पंक्तियां हैं जिन्हें फ़ाइल में इस प्रकार के मिलान की आवश्यकता है, और मैं 5/15/2015 प्रारूप में तिथियों से मेल नहीं खाता हूं। –

उत्तर

6

$ 1 और $ 2 वास्तव में अपने regex मैच से संबंधित नहीं हैं: एक विधि के तर्कों से पहले विधि कहा जाता है का मूल्यांकन किया जाता है, तो

"#{$1} and #{$2}" 

से पहले मूल्यांकन किया जाता है रेगेक्स आपकी स्ट्रिंग के खिलाफ मेल खाता है। आप पहले regex से मेल खाता नहीं किया है तो इन चर, नहीं के बराबर हो जाएगा तो आप वास्तव में

file = file.gsub(/(\b) \/ (\b)/, " and ") 

कि है आप से "और", यह भी रिक्त स्थान से घिरा हुआ रिक्त स्थान से घिरा हुआ एक स्लेश स्थान ले रही हैं कर रहे हैं। $ 1 और $ 2 को रिक्त तार होने के लिए अपडेट किया जाएगा, और इसलिए जब आप अगली स्ट्रिंग को संसाधित करते हैं तो आप वही व्यवहार देखेंगे।

+0

रॉब के उत्तर के तहत मेरी टिप्पणी देखें। आप उसे कैसे समझायेंगे_? :) –

+0

@SergioTulentsev यह सुनिश्चित नहीं है कि आपका क्या मतलब है - वैसे ही व्यवहार करता है जैसा मैं अपेक्षा करता हूं। –

+1

मुझे उलझन में होना चाहिए :) –

8

इस संदर्भ में कोष्ठक कुछ भी नहीं कर रहे हैं। आप /\b \/ \b/ का उपयोग कर एक ही परिणाम प्राप्त कर सकते हैं।

मुझे लगता है कि आप $1 और $2 द्वारा थोड़ा उलझन में आ रहे हैं। वे वास्तव में कुछ भी नहीं कर रहे हैं। वे शून्य हैं क्योंकि वे कुछ भी मेल नहीं कर रहे हैं (केवल एक शब्द सीमा)। क्या लिखा है आप के तार्किक बराबर है .gsub(/\b \/ \b/, " and ")

+0

अच्छा सिद्धांत। प्रयोगात्मक तथ्यों के विपरीत, हालांकि (मुझे लगता है): http://pastebin.com/Wa85vNjG –

+1

@ सर्गो http://pastebin.com/UBs7kCar –

+0

@ Ajedi32 नहीं, उसके परिणाम स्ट्रिंग में वह टेक्स्ट होता है क्योंकि वह केवल शब्द सीमाओं को प्रतिस्थापित कर रहा है और '' '' '' '' के साथ और, अन्य पाठ प्रभावित नहीं है। '' '$ 1''' और' '' $ 2'' खाली हैं। –

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