2010-01-07 19 views
9

है तो मिलान न करें, अगर मैं व्हाइटस्पेस नहीं रखता तो केवल स्ट्रिंग मिलान के लिए रेगेक्स पैटर्न को समझने के लिए प्रतीत नहीं होता है। उदाहरणरेगेक्स: यदि स्ट्रिंग में व्हाइटस्पेस

लिए
"this has whitespace".match(/some_pattern/) 

लौटना चाहिए nil लेकिन

"nowhitespace".match(/some_pattern/) 

पूरी स्ट्रिंग के साथ MatchData लौटना चाहिए। क्या कोई ऊपर के लिए समाधान सुझा सकता है?

+0

क्या आप यह निर्धारित करने की कोशिश कर रहे हैं कि स्ट्रिंग में व्हाइटस्पेस है या यदि स्ट्रिंग में एक निश्चित पैटर्न होता है लेकिन केवल अगर कोई सफेद जगह नहीं है? – mletterle

+0

मूल रूप से मैं स्ट्रिंग में व्हाइटस्पेस होने पर शून्य वापस लौटना चाहता हूं। –

उत्तर

19

रूबी में मुझे लगता है कि यह

होगा
/^\S*$/ 

इसका मतलब है "सेंट कला, गैर-सफ़ेद वर्णों की संख्या, अंत से मेल खाते हैं "

+0

आह! मैं अंत में लाइन एंकर का अंत लापता था। चीयर्स! –

+0

@ बार्ट, ध्यान दें कि '\ n' और' \ r' को सफेद स्पेस वर्ण भी माना जाता है। –

+4

आप इसके बजाय '/ \ A \ S * \ Z /' चाहते हैं, क्योंकि यह लाइनों की शुरुआत और अंत के बजाय स्ट्रिंग की शुरुआत और अंत से मेल खाएगा। '' lineone \ nlinetwo '''^^ \ S * $/'से मेल खाता है' 'लाइनोन'' –

3
>> "this has whitespace".match(/^\S*$/) 
=> nil 
>> "nospaces".match(/^\S*$/) 
=> #<MatchData "nospaces"> 

^ = स्ट्रिंग की शुरुआत

\ एस = गैर-सफ़ेद चरित्र, * = 0 या अधिक

$ = स्ट्रिंग के अंत

1

आप चाहते हैं:

/^\S*$/ 

कहना है कि" स्ट्रिंग की शुरुआत है, तो शून्य या अधिक गैर-सफ़ेद वर्णों से मेल, तो स्ट्रिंग का अंत। " प्री-डिफ़ाइंड कैरेक्टर क्लासेस के लिए सम्मेलन यह है कि लोअरकेस अक्षर एक वर्ग को संदर्भित करता है, जबकि एक अपरकेस अक्षर इसकी अस्वीकृति को संदर्भित करता है। इस प्रकार, \s व्हाइटस्पेस वर्णों को संदर्भित करता है, जबकि \S गैर-व्हाइटस्पेस को संदर्भित करता है।

3

सुनिश्चित नहीं हैं कि एक पैटर्न में यह कर सकते हैं, लेकिन आप की तरह कुछ कर सकते हैं:

"string".match(/pattern/) unless "string".match(/\s/) 
+0

+1 ...सवाल को स्ट्रिंग के रूप में व्याख्या किया जा सकता है जिसमें पैटर्न 'x' होता है जब तक स्ट्रिंग में व्हाइटस्पेस शामिल नहीं होता है ... –

4

तुम हमेशा रिक्त स्थान के लिए खोज सकते हैं, एक तो परिणाम नकारना:

"str".match(/\s/).nil? 
संबंधित मुद्दे