Разбор файла Erb для параметра метода с регулярным выражением - PullRequest
0 голосов
/ 04 мая 2011

Я пытаюсь проанализировать файл erb для параметра метода getMetaValueForName () следующим образом:

File.open(tpath) do |file|
    while (line = file.gets)
        name = line.match(/getMetaValueForName\(".*"\)/).to_s
        name = name.match(/"(.*?)"/).to_s
        netaName = name.gsub!(/"/, '')
        meta_names.push(name) unless name.blank?
    end
end

Это прекрасно работает, если в одной строке не несколько getMetaValueForName (), тогда я получу только значение первого метода.

Итак, я попытался изменить регулярное выражение на:

name = line.match(/(getMetaValueForName\(".*?"\))/)

, а затем получите результаты, изменив переменную name в массив, и сделайте другое сопоставление и gsub в каждом блоке do.

Но я все еще получаю только первый результат, а не все ...

Или есть более простой способ сделать это?

1 Ответ

1 голос
/ 04 мая 2011

Используйте метод String.scan , чтобы получить массив с совпадениями шаблона внутри строки.

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

Вот пример кода (не проверено):

IO.foreach(tpath) do |line|
  metanames += line.scan(/getMetaValueForName\("(.*)"\)/).map {|match| match[0] }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...