2012-05-31 3 views
0

У меня есть веб-страница. Источник HTML содержит этот текст:Gsub и регулярное выражение

<meta property="og:title" content="John"/> 

John пример, имя может отличаться. Я уверен, что og: title появится только один раз в тексте. Это мой код:

$browser.goto(url) 
x = $browser.html.gsub(/^.*<meta property="og:title" content="(.+?)".>/m, '\1') 

Я ожидал найти имя Джона в моей переменной х «\ 1» должен дать мне первую часть я положил в круглые скобки, то есть, то есть (+.?) Джон, верно? Кроме того, я использовал точку. чтобы соответствовать косой чертой /, есть ли лучший способ?

+0

Итак, вы хотите значение атрибута 'content' в переменной' x'? –

+1

Что вы пытаетесь выполнить и сколько тэгов вы работаете? Для чего-либо, кроме тривиального использования, вы должны использовать синтаксический анализатор, потому что регулярное выражение может сильно испортиться в любое время, когда изменяется страница. –

+0

Да, Желько, я хочу, чтобы это –

ответ

1

Если вы хотите только значение content:

html = '<meta property="og:title" content="John"/>' 
=> "<meta property=\"og:title\" content=\"John\"/>" 
html[/property="og:title" content="([^"]+)"/, 1] 
=> "John" 

Если вы не знакомы с регулярным выражением, "([^"]+)" может бросить вас. Это означает «с первого ", возьмите все до следующего ". Фактически это означает« захватить все внутри двойных кавычек ».

1

Этот код вернет весь HTML-код с соответствующим кодом (который находится между началом строки до и включая />), замененным на «Джон». Итак, это сводится к «Джону», а затем к HTML, который был после /> этого мета-свойства.

Если вы хотите, чтобы извлечь имя, и что тег происходит только один раз, вы можете использовать что-то вроде:

@browser.html =~ /<meta property="og:title" content="(.+?)"/ 
x = $1 
2

Использование Watir API:

x = browser.meta.attribute_value "content" 

Я не был в состоянии получить доступ элемент meta, используя либо css, и xpath.

+0

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

+0

Неправильно было использовать регулярное выражение, поэтому ответ Желько должен быть принят – pguardiario

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