[Ruby] //g
Alexander Bokovoy
a.bokovoy at sam-solutions.net
Wed Oct 9 12:58:05 MSD 2002
On Wed, Oct 09, 2002 at 12:57:54PM +0700, Ilya Palagin wrote:
> Неужто в рубиновом regexp не сделали опцию g (глобальный поиск)?
> В перловом regexp это часто используется для поиска n-го совпадения
> или подсчета количества совпадений.
>
> Например, мне нужно найти подстроку, находящуюся перед третьим
> вхождением "var",
> в perl я бы это сделал так:
> $string = "var one 23 var two 4 who and var 17 ozzy where var 9";
> $count = 0;
> while($string =~ /var/g) {
> print $` . "\n" if ($count++ == 2);
> }
>
> Можно ли сделать то же самое средствами regexp в ruby, не раскладывая
> строку на составляющие для подсчета кол-ва вохждений?
В данном случае надо использовать стандартный шаблон-итератор в строке и
особенность метода глобальной замены String#gsub, позволяющего указывать
строку-заменитель в виде итератора:
string = "var one 23 var two 4 who and var 17 ozzy where var 9"
count = 0
string.gsub /var/ do |str|
puts $` if (count+=1) == 3
end
Обратите внимание на то, что мы выполняем присваивание _до_ сравнения,
потому и 3 вместо 2.
И еще, результат операции глобальной замены мы, естественно, игнорируем.
--
/ Alexander Bokovoy
---
Fools rush in -- and get the best seats in the house.
More information about the Ruby
mailing list