Регулярное выражение для получения URL, содержащего ключевое слово

#regex #xml #url #atom-feed

#регулярное выражение #xml #url #atom-feed

Вопрос:

Из-за redbubble.com из-за отсутствия API я использую ATOM feed для кражи информации о пользовательских изображениях.

Вот как выглядит XML:

 <entry>
  <id>ID</id>
  <published>Date Published</published>
  <updated>Date Updated</updated>
  <link type="text/html" rel="alternate" href="http://www.redbubble.com/link/to/post"/>
  <title>Title</title>
  <content type="html">
    Blah blah blah stuff about the image..
    amp;<a href="http://www.redbubble.com/products/configure/config-id"amp;>amp;<img src="http://ih1.redbubble.net/path-to-image" alt="" /amp;>
  </content>
  <author>
  <name>Author Name</name>
  <uri>http://www.redbubble.com/people/author-user-name</uri>
  </author>
  <link type="image/jpeg" rel="enclosure" href="http://ih0.redbubble.net/path-to-the-original-image"/>
  <category term="1"/>
  <category term="2"/>
</entry>
  

В принципе, используя regex … как бы я мог получить href свойство внутри ссылки в теге content?

Одна вещь, которую мы знаем наверняка, это то, что в пути всегда будет указано configure, т. Е. http://somesite.com/**configure**/id

Итак, в принципе, мне просто нужно найти URL с помощью configure in и получить все это целиком…

Ответ №1:

Следующее регулярное выражение извлечет содержимое href на основе ваших требований. Похоже, это работает для примера кода.

 href="(w[^"] /configure/w[^"] )
  

Комментарии:

1. Почему бы не использовать lookaheads / lookbehinds?

2. @ishpeck — Я считаю, что это может быть более эффективным поиском в regex.

3. @stema — спасибо — вы правы. Вероятно, лучше без w

Ответ №2:

Какой бы язык программирования вы ни использовали, не пытайтесь анализировать все это с помощью регулярного выражения. Сначала используйте анализатор XML для извлечения href="..." . Затем, конечно, используйте регулярное выражение, чтобы убедиться, что URL содержит configure .

Как прокомментировал @KARASZI, XPath — еще один хороший подход.

Комментарии:

1. Сначала разбирайте XML, только если производительность действительно является проблемой. В противном случае просто используйте регулярное выражение — его гораздо проще кодировать…

Ответ №3:

Если вам нужно использовать регулярное выражение, попробуйте это:

 href="(?=[^"]*configure)([^"]*)
  

rubular.com

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

Ответ №4:

Спасибо за ваши потрясающие ответы, но мой коллега решил это за меня!

Это то, что я в итоге использовал:

 /http://([^"/]*/)*configure/([^"]*)/
  

(Кстати, регулярное выражение Ruby)