Регулярное выражение: не совпадать, если строка содержит пробелы - PullRequest
10 голосов
/ 07 января 2010

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

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

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

"nowhitespace".match(/some_pattern/)

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

Ответы [ 7 ]

21 голосов
/ 07 января 2010

В Ruby я думаю, что это будет

/^\S*$/

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

4 голосов
/ 07 января 2010

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

"str".match(/\s/).nil?
3 голосов
/ 07 января 2010

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

"string".match(/pattern/) unless "string".match(/\s/)
3 голосов
/ 07 января 2010
>> "this has whitespace".match(/^\S*$/)
=> nil
>> "nospaces".match(/^\S*$/)
=> #<MatchData "nospaces">

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

\ S = непробельный символ, * = 0 или более

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

1 голос
/ 07 января 2010

Вы хотите:

/^\S*$/

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

1 голос
/ 07 января 2010
   "nowhitespace".match(/^[^\s]*$/)
0 голосов
/ 07 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...