Почему этот код ruby ​​не сравнивает регулярные выражения? - PullRequest
3 голосов
/ 01 марта 2010
if string == /\s{1,}/ or string == /\n{1,}/
  puts "emptiness..."
end

Ответы [ 2 ]

25 голосов
/ 01 марта 2010

Чтобы проверить String против Regex, вы можете сделать любую из пяти вещей:

1: Использовать String#match:

' '.match /\s{1,}/    # => #<MatchData:0x118ca58>
'f'.match /\s{1,}/    # => nil

2: Использовать Regex#match:

/\s{1,}/.match ' '    # => <MatchData:0x11857e4>
/\s{1,}/.match 'f'    # => nil

3: использовать String#=~:

' ' =~ /\s{1,}/       # => 0
'f' =~ /\s{1,}/       # => nil

4: Использовать Regex#=~:

/\s{1,}/ =~ ' '       # => 0
/\s{1,}/ =~ 'f'       # => nil

5: используйте Regex#=== (это то, что используется в case выражениях):

/\s{1,}/ === ' '      # => true
/\s{1,}/ === 'f'      # => false

Примечание: String#=== не делает то, что вы хотите:

' ' === /\s{1,}/      # => false
'f' === /\s{1,}/      # => false
7 голосов
/ 01 марта 2010

При сравнении с регулярными выражениями в Ruby, вы должны использовать сравнение '= ~' вместо '=='.

Попробуйте и посмотрите, даст ли это то, что вы ожидаете.

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