LINUX.ORG.RU

Ruby: сравнение с массивом регэкспов

 ,


2

3

Есть у меня такая конструкция:

massiv=[
"aaa",
"bbb",
]

print 'мама мыла раму' if massiv.include?(stroka)

хочу массив не просто из строчек с которыми сравнивать, а вот так:

regmassiv=[
"^aaa",
"^[78]bbb",
"zzzz$",
]

И чтобы через этот массив парсилась эта самая stroka. выпало хоть 1 раз, вернуть true. Такое возможно?

★★★★

мм... на перле это выглядело бы примерно так:

my @regmassiv = (
    qr/^aaa/,
    qr/^[78]bbb/,
    qr/zzzz$/,
);

say 'мама мыла раму' if grep { $stroka ~~ $_ } @regmassiv;

примерно так же и на руби можно, насколько я помню…

arsi ★★★★★
()
Ответ на: комментарий от arsi

Идею. понял, но как сравнение с перебором массива сделать красиво не догоняю. Циклом for или подобным пробегать тупо как-то.

yu-boot ★★★★
() автор топика
Ответ на: комментарий от anonymous

убивать!

Спокойствие, только спокойствие! Лучше обозвать переменные string, array и ещё как «правильно» и потом выяснять, почему не работает в том или ином ЯП :)

yu-boot ★★★★
() автор топика
Ответ на: комментарий от yu-boot

да в руби же вроде есть тот же grep, только пишется в ооп-стиле: массив.grep… не помню уже, давно руби тыкал, но точно что-то похожее использовал.

arsi ★★★★★
()
Ответ на: комментарий от yu-boot

Лучше обозвать переменные string, array и ещё как «правильно»

но не транслитом же.

anonymous
()
Ответ на: комментарий от yu-boot

Для нелюбителей циклов можно предложить map. Хотя тебе все равно надо один-единственній сигнал о вхождении.

cdshines ★★★★★
()
str = 'aaargh'
ary = [/^aaa/, /^[78]bbb/, /zzzz$/]
print 'мама мыла раму' if ary.inject(false) { |result, regexp| result ||= !!(str =~ regexp) }
Apple-ch ★★
()
my_array.any { |regexp_item| regexp_item! =~ my_string }

писал по памяти если чо

ZuBB ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.