2015-04-05 2 views
-1

У меня есть строка, как этот ниже:Рубин расширенный GSUB

My first <a href="http://google.com">LINK</a> 
and my second <a href="http://yahoo.com">LINK</a> 

Как заменить все ссылки на эту строку из HREF = «URL» в HREF = "/ переадресовать URL = URL? "так, чтобы оно стало

My first <a href="/redirect?url=http://google.com">LINK</a> 
and my second <a href="/redirect?url=http://yahoo.com">LINK</a> 

Спасибо!

ответ

2

Учитывая ваш случай, мы можем построить следующее регулярное выражение:

re =/
    href=  # Match attribute we are looking for 
    [\'"]?  # Optionally match opening single or double quote 
    \K   # Forget previous matches, as we dont really need it 
    ([^\'" >]+) # Capture group of characters except quotes, space and close bracket 
/x 

Теперь вы можете заменить захваченную группу шпагатом вам необходимо (используйте \1 для ссылки на группу):

str.gsub(re, '/redirect?url=\1') 
+0

Неужели вы думаете, что вы должны ОП объяснять регулярное выражение? Я предлагаю вам написать многострочный 'r = /.../ x', чтобы вы могли добавлять комментарии, а затем' str.gsub (r) '. Мой ответ [здесь] (http://stackoverflow.com/questions/29216618/consistently-separate-values-in-array/29218517#29218517) дает пример. –

+0

@CarySwoveland Мой плохой, добавил объяснение. –

+0

Вы прощены, на этот раз. –

1

gsub позволяет сопоставить регулярное выражение шаблоны и использовать захваченный подстрок в замещении:

x = <<-EOS 
My first <a href="http://google.com">LINK</a> 
and my second <a href="http://yahoo.com">LINK</a> 
EOS 

x.gsub(/"(.*)"/, '"/redirect?url=\1"') # the \1 refers to the stuff captured 
             # by the (.*) 
+0

Спасибо Amit, но это не решает проблему, поскольку у меня могут быть другие слова в строке, содержащей двойные кавычки. –

+0

Какие еще неустановленные ограничения имеют ваш вопрос? Вы должны добавить их в свой первоначальный вопрос. –

+0

Извините, Амит, что вы имеете в виду с ограничениями? Это простая строка со ссылками из базы данных. Ничего больше ... –

Смежные вопросы