2010-01-07 332 views
9

我似乎無法找出匹配字符串的正則表達式模式,只有當它不包含空格時。例如正則表達式:如果字符串包含空白,則不匹配

"this has whitespace".match(/some_pattern/) 

應該返回nil

"nowhitespace".match(/some_pattern/) 

應與整個字符串返回MatchData。任何人都可以爲上述建議解決方案嗎?

+0

你是否試圖確定一個字符串是否包含空格,或者如果一個字符串包含某種模式,但只有在沒有空格的情況下? – mletterle 2010-01-07 04:22:14

+0

基本上我想匹配返回零如果字符串包含空格。 – 2010-01-07 04:57:13

回答

19

在Ruby我認爲這將是

/^\S*$/ 

這意味着「st藝術,匹配任意數量的非空白字符,結束「

+0

啊!我在最後錯過了線路終點。乾杯! – 2010-01-07 04:58:39

+0

@Bart,注意'\ n'和'\ r'也被認爲是空白字符。 – 2010-01-07 06:26:47

+4

您可能需要'/ \ A \ S * \ Z /',因爲這將匹配字符串的開頭和結尾,而不是行的開頭和結尾。 ''lineone \ nlinetwo''與'/^\ S * $ /'匹配會返回''lineone'' – 2010-01-07 07:40:20

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

^ =串開頭

\ S =非空白字符,* = 0以上

$ =串的端

1
"nowhitespace".match(/^[^\s]*$/) 
1

你想:

/^\S*$/ 

,上面寫着」字符串的開頭,然後零個或多個非空白字符匹配,則字符串的結尾「。預定義字符類的約定是小寫字母表示一個類,而大寫字母表示其否定。因此,\s引用空白字符,而\S引用非空白字符。

3

不知道你能做到這一點的一個模式,但你可以這樣做:

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

+1以不同的方式思考問題...只要該字符串不包含空格,該問題就可以解釋爲匹配包含模式'x'的字符串... – 2010-01-07 04:41:28

0

str.match(/^\S*some_pattern\S*$/)

4

你可以隨時搜索空間,一則否定的結果:

"str".match(/\s/).nil?