Является ли использование PHP Explode () для очистки HTML считается плохой практикой? - PullRequest
1 голос
/ 20 февраля 2012

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

Это подводит меня к моему вопросу, заключающемуся в следующем: является ли плохой практикой использование PHP-разнесениядля разбивки строки HTML-кода, чтобы выбрать бит текста?Мне нужно почистить страницу для получения разной информации, и из-за моих ужасных знаний в области регулярных выражений (на полной степени по разработке программного обеспечения мне пришлось написать, может быть, одну ....) Я решил использовать explode ().

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

public function split_between($start, $end, $blob)
{
    $strip = explode($start,$blob);
    $strip2 = explode($end,$strip[1]);
    return $strip2[0];
}

public function get_abstract($pubmed_id)
{
    $scrapehtml = file_get_contents("http://www.ncbi.nlm.nih.gov/m/pubmed/".$pubmed_id);
    $data['title'] = $this->split_between('<h2>','</h2>',$scrapehtml);
    $data['authors'] = $this->split_between('<div class="auth">','</div>',$scrapehtml);
    $data['journal'] = $this->split_between('<p class="j">','</p>',$scrapehtml);
    $data['aff'] = $this->split_between('<p class="aff">','</p>',$scrapehtml);
    $data['abstract'] = str_replace('<p class="no_t_m">','',str_replace('</p>','',$this->split_between('<h3 class="no_b_m">Abstract','</div>',$scrapehtml)));
    $strip = explode('<div class="ids">', $scrapehtml);
    $strip2 = explode('</div>', $strip[1]);
    $ids[] = $strip2[0];
    $id_test = strpos($strip[2],"PMCID");
    if (isset($strip[2]) && $id_test !== false)
    {
        $step = explode('</div>', $strip[2]);
        $ids[] = $step[0];
    }
    $id_count = 0;
    foreach ($ids as &$value) {
        $value = str_replace("<h3>", "", $value);
        $data['ids'][$id_count]['id'] = str_replace("</h3>", "", str_replace('<span>','',str_replace('</span>','',$value)));
        $id_count++;
    }

    $jsonAbstract = json_encode($data);

    echo $this->indent($jsonAbstract);
}

Ответы [ 3 ]

3 голосов
/ 20 февраля 2012

Я настоятельно рекомендую вам попробовать PHP Simple HTML DOM Parser . Он обрабатывает недопустимый HTML и предназначен для решения той же проблемы, над которой вы работаете.

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

// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images 
foreach($html->find('img') as $element) 
       echo $element->src . '<br>';

// Find all links 
foreach($html->find('a') as $element) 
       echo $element->href . '<br>';
1 голос
/ 20 февраля 2012

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

Похоже, что вы просматриваете PubMed, который, я думаю, имеет довольно статическую наценку с точки зрения наценки. Если то, что у вас есть, работает и работает так, как вы надеетесь, я не вижу причин для перехода на использование регулярных выражений, они не обязательно будут быстрее в этом примере.

0 голосов
/ 20 февраля 2012

Изучите регулярные выражения и попробуйте использовать язык с библиотеками для таких задач, как perl или python.Это сэкономит вам много времени.Поначалу они могут показаться пугающими, но они действительно легки для большинства задач.Попробуйте прочитать это: http://perldoc.perl.org/perlre.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...