Regex для удаления ссылок с помощью Yahoo Pipes

все. Я работаю над школьным проектом, и я изо всех сил пытаюсь очистить все ссылки в ленте с помощью каналов Yahoo.

Например, удаление <a href="http://mickey.com">Go to Source</a> из моего описания товара.

Оставление кнопки Перейти к источнику без активной ссылки

Я использую модуль регулярных выражений, и я пытался использовать это выражение

#</?a[^>]*>#iu

Но безуспешно. Пожалуйста, помогите мне с этим.


person JayJay    schedule 13.12.2009    source источник
comment
</?a[^>]*>, похоже, мне понравилось. конечно, он довольно слабый, он бы также удалил <abbr> и тому подобное, но он работает без хешей. В чем именно твоя проблема? Можете поставить трубку?   -  person Kobi    schedule 13.12.2009


Ответы (4)


По сути, вы хотите:

<a.*?>(.*?)</a>

Это сохранит текст ссылки в $ 1. ". *?" не является жадным совпадением - это означает, что он будет соответствовать чему угодно, но как можно меньше раз.

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

<\s*[Aa].*?>(.*?)<\s*/[Aa]\s*>

Даже это не является пуленепробиваемым, но подходит для большинства случаев.

Не забудьте параметры g и s, если вы используете модуль «регулярное выражение», а не «строковое регулярное выражение».

person Gavin Brock    schedule 08.01.2010

попробуй это:

$html = 'This is some text <a href="http://mickey.com">Go to Source</a> more text';
$result = preg_replace('%<a[ ]{1}.*?>(.*?)</a>%i', '$1', $html);
echo $result // echo's "This is some text Go to Source  more text"
person Pedro Lobito    schedule 16.08.2011

По крайней мере, HTML - это контекстно-свободный язык. Невозможно правильно разобрать CFL с помощью регулярных выражений. Таким образом, это невозможно. Используйте подходящую библиотеку синтаксического анализа HTML и переделайте DOM-Tree или четный поток (в зависимости от интерфейса) в соответствии с тем, что вы хотите делать.

person Tetha    schedule 13.12.2009

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

К сожалению, Yahoo Pipes, похоже, не включает парсер HTML. Согласно этой записи в блоге, однако вы можете передать свои данные через HTML Tidy, а затем использовать их < модуль href = "http://pipes.yahoo.com/pipes/docs?doc=sources#FetchData" rel = "nofollow noreferrer"> Fetch Data, который может анализировать XML для извлечения ваших данных в структурированном формате. . Инструменты для работы с XML впоследствии не идеальны (они, похоже, не поддерживают ничего столь же полезного, как запросы селектора XPath или CSS), но, по крайней мере, вы можете иметь дело с данными в структурированном формате, который был проанализирован надлежащим Парсер HTML.

person Brian Campbell    schedule 08.01.2010