2015-02-15 7 views
5

मैं बहुत यकीन है कि मैं देखा है "\R के बावजूद कि वे कहाँ से आया है, Ruby2 में पेश किया गया था नई-पंक्तियों से मेल करने के: यूनिक्स \n, MacOS \r या विंडोज़ \r\n" हूँ कहीं । उस ने कहा, रुबी 2 को \R का इलाज करना चाहिए जैसे %r{\r\n|\r|\n}रूबी regex 'बैकस्लैश आर' उर्फ ​​' आर' पैटर्न

यह ठीक काम करता है:

▶ "a\nb".match /\R/ 
#⇒ #<MatchData "\n"> 
▶ "a\rb".match /\R/ 
#⇒ #<MatchData "\r"> 
▶ "a\r\nb".match /\R/ 
#⇒ #<MatchData "\r\n"> 

भी है कि क्या लाइन अंत/फ़ीड जोड़ दिया जाता है:

▶ "a\r\n\nb".match /\R{2}/ 
#⇒ #<MatchData "\r\n\n"> 

जब तक कि एक \R नकारना की कोशिश करता है:

▶ "a\nb".match /[^\R]+/ 
#⇒ #<MatchData "a\nb"> 

negating \n हालांकि ठीक काम करता है :

▶ "a\nb".match /[^\n]+/ 
#⇒ #<MatchData "a"> 

दुर्भाग्यवश, \R Google के लिए बहुत कठिन है। न तो Regexp rdoc और न ही Regular Expressions इसका उल्लेख है।

क्या कोई रेगेक्स गुरु यहां एक स्पष्टीकरण छोड़ देगा, ताकि कम से कम आसानी से गुग हो जाए?

अग्रिम धन्यवाद।

+1

@ साहा के स्पष्टीकरण को पढ़ने के बाद, जो पूरी तरह से उचित लगता है, मैं सोच रहा हूं कि यह एक बग हो सकता है। ऐसा लगता है कि "एक \ nb" .match/[^ \ R] +/'आपको जिस तरह से अपेक्षित तरीके से काम करना चाहिए। मैंने एक ईमेल छोड़ दिया [के। Takata] (https://github.com/k-takata) पूछ रहा है कि वह आपके प्रश्न पर एक नज़र डालें। –

+0

@CarySwoveland इसके लिए धन्यवाद। दूसरी तरफ, मुझे नहीं लगता कि परमाणु अभिव्यक्ति के संयोजन को आसानी से अस्वीकार किया जा सकता है। हमें बस गैर-अक्षर से स्क्वायर ब्रैकेट के अंदर सही व्यवहार की अपेक्षा नहीं करनी चाहिए, ठीक उसी तरह, जैसा कि हम चरित्र समूह के अंदर ठीक से कार्य करने के लिए पिछड़े संदर्भ (स्पष्ट रूप से लगभग उसी नोटेशन के साथ) की उम्मीद नहीं करते हैं। – mudasobwa

उत्तर

4

यह लेखक से है: https://github.com/k-takata/Onigmo/blob/master/doc/RE#L101। यह कहता है

\R  Linebreak 

     Unicode: 
      (?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}]) 

     Not Unicode: 
      (?>\x0D\x0A|[\x0A-\x0D]) 

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

+0

धन्यवाद, यह संदर्भ बिल्कुल ठीक है जो मुझे याद आया। क्या आप लाइन एंकर को शामिल करने के लिए अपना संदर्भ अपडेट करना चाहते हैं: https://github.com/k-takata/Onigmo/blob/master/doc/RE#L101 – mudasobwa

+0

@mudasobwa: हो गया। – Stephan202