Нужно модифицированное поведение для не жадного grep - PullRequest
1 голос
/ 15 сентября 2011

Я пытаюсь удалить тонну спама, который был введен в блог клиента.Одна из проблем заключается в том, что хак, который изначально делал инъекцию, сделал это таким образом, что он фактически завелся с неправильно сформированными многокомпонентными ссылками, поэтому у меня возникают проблемы с их кратким захватом.

Моя мысльдолжен был сбросить все ссылки в таблице записей в текстовый файл, затем удалить действительные из этого списка и создать оттуда скрипт bash, который удалял вредоносные по одной строке за раз.Я пытался использовать не жадный grep для создания дампов ссылок, иначе в случаях, когда в посте было более одной ссылки, он шел от начала первой ссылки до конца последней.Это строка, которую я использовал:

grep -Po "<a href=[\'\"][^\'\"]*[\'\"]>.*?</a>" wp_posts.sql>full-link-list.txt

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

<a href="http://blogtorn.com/images/">where <a href="http://clinesite.com/images/">buy n viagra </a>

из раздела, подобного следующему:

<a href="http://blogtorn.com/images/">where <a href="http://clinesite.com/images/">buy n viagra </a>  do you buy viagra | buy cialis phentermine | cheap levitra online</a>

Не все ссылки разрываются, как это, хотя, и если я уберу те, что выводятся изКоманда выше, я думаю, будет очень трудно выследить обломки.Я думаю, что мне нужно либо что-то, что захватывает весь блок (т. Е. Совпадающее отверстие <a href с таким же количеством закрывающих </a>), либо просто наименьшее возможное внутреннее совпадение (т. Е. Жадное изнутри), и язатем сделайте это в несколько проходов, но я открыт и для других предложений.Есть мысли по этому поводу?Спасибо!

1 Ответ

2 голосов
/ 15 сентября 2011

Я думаю, что подход наизнанку - ваш лучший выбор.Предполагая, что внутри элементов <a> нет никаких других тегов, это должно быть так же просто, как изменить .*? на [^<>]*.И, как вы сказали, делая несколько проходов.

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

...