2015-04-16 3 views
2

Я немного смущен из-за ответа на следующий вопрос от RubyMonk.RubyMonk Advanced String Operations

Давайте найти второй символ в строке «RubyMonk довольно Brilliant» предшествует пробел, который должен быть «P»

'RubyMonk Is Pretty Brilliant'.match(/ ./, 9) 

Почему бы поместить «9» в Аргумент?

Я бы очень признателен за разъяснения.

+2

RubyMonk обманывает, он начинает смотреть на 9-й символ. Также он соответствует «P», а не «P» – steenslag

ответ

3

Монах ясно говорит

Когда второй параметр присутствует, то он определяет положение в строке, чтобы начать поиск.

+1

См. Также: http://ruby-doc.org/core-2.1.4/String.html#method-i-match – pioto

3

Как уже отмечался в комментариях, код «обман», сопоставляя пространство, за которым следует символ начиная после 9-го символа. Это, откровенно говоря, ужасный пример того, как делать то, что он утверждает, потому что вы не можете делать это в целом.

Если вы действительно хотите, чтобы найти второй символ, который предшествует пробел, и вы не хитрить и искать для себя, где он может быть, вы могли бы сделать одно из следующих действий:

str = 'RubyMonk Is Pretty Brilliant' 

Найдите пробел, за которым следует не-пробел, за которым следует одно или несколько не-пробелов, за которым следует пробел, за которым следует символ. Захват этого персонажа:

str[/ [^ ]+ (.)/,1] 
#=> "P" 

Найти все символы, которые предшествуют пробел, а затем найти второй один:

str.scan(/(?<=)./)[1] 
#=> "P" 

Сплит на пространствах (только сохраняя первые три порции, для эффективности) , а затем найдите третий матч, затем найдите первый символ:

str.split(' ',3)[2][0] 
#=> "P" 
Смежные вопросы