В Ruby, какой самый правильный способ использовать регулярное выражение для сопоставления одной цифры и ** ничего другого **? - PullRequest
3 голосов
/ 09 октября 2010

( Обновление: основное внимание в этом вопросе уделяется проверке части "ничего другого")

Учитывая строку s, которая может содержать все, что является наиболее правильным регулярным выражением в Ruby, чтобы проверить, является ли оно одной цифрой и ничем иным? (одна цифра и только одна цифра).

Ответы [ 4 ]

5 голосов
/ 09 октября 2010

Использование /\A\d\z/

irb(main):001:0> "asd\n7\n" =~ /\A\d\Z/
=> nil # works as false
irb(main):002:0> "asd\n7\n" =~ /\A\d\z/
=> nil # works as false
irb(main):083:0> "7\n"=~/\A\d\Z/
=> 0 # \Z fails, need \z
irb(main):084:0> "7\n"=~/\A\d\z/
=> nil # works as false
irb(main):005:0> "7" =~ /\A\d\Z/
=> 0 # works as true
irb(main):006:0> "7" =~ /\A\d\z/
=> 0 # works as true

http://www.zenspider.com/Languages/Ruby/QuickRef.html:

\z            end of a string
\Z            end of a string, or before newline at the end
1 голос
/ 09 октября 2010

Попробуйте /\A\d(?![\S\W])/?

irb(main):016:0> "7" =~ /\A\d(?![\S\W])/
=> 0
irb(main):017:0> "7\n" =~ /\A\d(?![\S\W])/
=> nil
irb(main):018:0> "aljda\n7\n" =~ /\A\d(?![\S\W])/
=> nil
irb(main):022:0> "85" =~ /\A\d(?![\S\W])/
=> nil
irb(main):023:0> "b5" =~ /\A\d(?![\S\W])/
=> nil
1 голос
/ 09 октября 2010
s.scan(/\b\d\b/)

irb(main):001:0> "7\n" =~ /\b\d\z/
=> nil
irb(main):002:0> "7" =~ /\b\d\z/
=> 0
0 голосов
/ 09 октября 2010
^\d$

^ - начало строки, \d - цифра и $ - конец строки

ПРИМЕЧАНИЕ : как указано в комментариях ^ и $ работают как для строк, так и для строк, поэтому, если вы планируете использовать многострочный ввод, вы должны использовать \A и \Z

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