2010-01-07 329 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?