2010-01-07 3 views
9

Я не могу найти шаблон регулярного выражения для соответствия строк, только если он не содержит пробелов. НапримерRegex: не совпадают, если строка содержит пробелы

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

должен вернуть nil но

"nowhitespace".match(/some_pattern/) 

должен вернуть MatchData со всей строки. Может ли кто-нибудь предложить решение для вышеперечисленного?

+0

Вы пытаетесь определить, содержит ли строка пробелы или строка содержит определенный шаблон, но ТОЛЬКО, если нет пробелов? – mletterle

+0

В принципе, я хочу, чтобы совпадение возвращало нуль, если строка содержит пробелы. –

ответ

19

В Ruby я думаю, что было бы

/^\S*$/ 

Это означает, что "st искусство, матч любое количество непробельных символов, конец «

+0

Ahh! В конце я отсутствовал в конце строки. Ура! –

+0

@Bart, обратите внимание, что '\ n' и' \ r' также считаются символами пробела. –

+4

Вместо этого вы можете использовать '/ \ A \ S * \ Z /', поскольку это будет соответствовать началу и концу строки, а не началу и концу строк. '' lineone \ nlinetwo "', совпадающий с '/^\ S * $ /' будет возвращать '' lineone '' –

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

^ = начало строки

\ S = непробельного характер, * = 0 или более

$ = конец строки

1

Вы хотите:

/^\S*$/ 

Это говорит» соответствует началу строки, а затем ноль или более, не пробельные символы, то конец строки ". Соглашение для предварительно определенных классов символов заключается в том, что строчная буква относится к классу, а буква в верхнем регистре относится к ее отрицанию. Таким образом, \s относится к пробельным символам, а \S относится к не-пробелам.

3

Не уверен, что вы можете сделать это в одной модели, но вы можете сделать что-то вроде:

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

+1 для размышлений о другом вопросе ...вопрос может быть интерпретирован как совпадение строки, содержащей шаблон «x», если строка не содержит пробелы ... –

4

Вы можете всегда поиск для пространств, затем свести на нет результат:

"str".match(/\s/).nil? 
Смежные вопросы