Помогите с искажением данных PHP как с sed / awk / grep - PullRequest
1 голос
/ 30 апреля 2010

Хорошо, ребята ... У меня есть HTML, который мне нужно разобрать в php-скрипте и исказить данные вокруг abit. Для лучшего объяснения я покажу, как бы я делал это в скрипте bash, используя awk, grep, egrep и sed через ужасный набор каналов. Прокомментировано для ясности.

curl -s http://myhost.net/mysite/           | \ # retr the document 
       awk '/\/\action/,/submit/'           | \ # Extract only the form element
       egrep -v "delete|submit"             | \ # Remove the action lines 
       sed 's/^[ \t]*//;s/[ \t]*$//'        | \ # Trim extra whitespaces etc. 
       sed -n -e ":a" -e "$ s/\n//gp;N;b a" | \ # Remove every line break
       sed '{s|<br />|<br />\n|g}'          | \ # Insert new line breaks after <br />
       grep "onemyndseye@localhost"         | \ # Get lines containing my local email
       sed  '{s/\[[^|]*\]//g}'              | \ # Remove my email from the line

Эти команды принимают элемент формы, который выглядит следующим образом:

<form action="/action" method="post">
    <input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php">
        http://www.linux.com/rss/feeds.php
    </a> [email: 
        onemyndseye@localhost (Default)
    ]<br />         
    <input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml">
        http://www.ubuntu.com/rss.xml
    </a> [email: 
        onemyndseye@localhost (Default)
    ]<br /> 
    <input type="submit" name="delete_submit" value="Delete Selected" />

И разбивает его на полные однострочные операторы ввода. Готов к вставке в другую форму:

<input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php">http://www.linux.com/rss/feeds.php</a> <br />
<input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml">http://www.ubuntu.com/rss.xml</a> <br />

Большой вопрос, как это сделать в PHP? Мне удобно использовать PHP для скручивания страницы ... но, похоже, я потерялся при фильтрации вывода.

Спасибо заранее. :)

1 Ответ

1 голос
/ 30 апреля 2010

Вы не фильтруете вывод. Вы используете simple_html_dom для анализа и манипулирования этим способом. это действительно более интуитивно понятно.

Что-то вроде

// Create DOM from URL or file
$html = file_get_html('...');

// Find all a hrefs in a form tag
foreach($html->find('form a') as $element)
       echo $element->src . '<br>';
...