Сложность вывода нескольких результатов из шаблона регулярных выражений - PullRequest
0 голосов
/ 04 мая 2020

Я создал запрос на получение, который возвращает тело ответа веб-страницы. Я пытаюсь использовать регулярное выражение для сопоставления всех экземпляров name = "valuehere" и возврата всех экземпляров "valuehere".

Мне удалось получить тело ответа, чтобы я возвращал следующие данные.

"name = \" firstparameter \ "", "name = \ secondparameter \" "," name = \ "thirdparameter \" "," name = \ "четвертый параметр \" "

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

response = request.response             #gets the full response body of a page and saves to response
puts response.code                      # prints the http response code
parameters = response.body.split(" ").grep(/name=/)            #split the response into an array and grep for anything with name=
parameters.each do |x| 
    x = parameters.to_s.match(/(?<=\\\").*?(?=\\")/i)          #converts array to string and performs regex match()
    puts x
end

Проблема в том, что я хочу вернуть значение name = "valuehere" для каждого экземпляра, а не только первый.

Метод grep нельзя использовать в каждом методе, по-видимому, и я также попробовал следующее:

parameters.each do |x| 
    puts x.match(/(?<=\\\").*?(?=\\")/i)          #converts array to string and performs regex match()

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

1 Ответ

0 голосов
/ 04 мая 2020

Попробуйте использовать scan вместо совпадения. Сканирование вернет все совпадения

Обновление 1

input_str = %Q["name=\"firstparameter\"", "name=\"secondparameter\"", "name=\"thirdparameter\"", "name=\"fourthparameter\""]
puts "\n"

input_str.split(",").each do |x|
  puts x.split('"').last
  puts "\n"
end
Output :::::::
$ ruby reg.rb

firstparameter

secondparameter

thirdparameter

fourthparameter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...