2009-02-23 1 views
1
(?:) 

Это действительное рубиновое регулярное выражение, может ли кто-нибудь сказать мне, что это значит?Ruby выражение

Благодаря

ответ

3

Он не будет захватывать часть строки соответствия в backreference (т.е. \ 1).

+0

@gpojd, Как я должен понимать '?' и здесь? – eric2323223

+0

Например, (\ d +) будет записывать последовательные цифры в обратном направлении, например \ 1. Если вы хотите сгруппировать часть регулярного выражения, но не хотите их записывать, вы должны использовать (?: \ D +). Неправильное захват данных может снизить производительность. – gpojd

9

Как и другие пользователи, он используется как не захватывающий синтаксис для регулярного выражения, но он также является действительным синтаксисом ruby ​​вне регулярного выражения.

В рубине ?: целое значение для символа двоеточия:

% irb 
irb> ?: 
=> 58 
irb ":"[0] 
=> 58 

Добавление скобки не меняет значение: (?:) == ?:

При добавлении пространства (? :), это тройной оператор, который является, по существу, сокращенным, если/then/else в рубине, поэтому заявление (bool ? truish : falsy) эквивалентно

if bool then 
    truish 
else 
    falsy 
end 
+0

?: Оценивается как?? в Ruby 1.9. – Chuck