Warning: array_merge(): Argument #2 is not an array in /hsphere/local/home/magistr/codeismy.name/wp-content/plugins/wp-pagenavi/scb/Options.php on line 46

PHP парсер

Дата: Март 21, 2009

(1) комментарий

Довольно часто возникает задача вытянуть какой-нибудь кусок текста из файла или с веб странички, стянуть например те же курсы с сайта центробанка или даже перетащить себе целую базу данных с чужого сайта. Именно для разбора текста и получения фраз и импользуется парсер. в данной статье я постараюсь показать как быстро и просто можно написать свой парсер

вот пример готового кода

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Parser {
public $link='';
public $text='';
public $arr=array();


public function Parser($param,$content) {
$this->text=$content;
foreach ($param as $key => $value)
{
$this->mask=$value;
if (!empty($this->text))
{
$arr[$key]=$this->Find();
}
}
$this->result=$arr;
}
public function Find() {
$mask=explode("\r\n",$this->mask);
$res=array();
for($i=0;$i<count($mask);$i++) {
preg_match_all("#{(.+?)}#",$mask[$i],$key);
$mask[$i]=quotemeta($mask[$i]);
$mask[$i]=preg_replace("#{(.+?)}#","(.*?)",$mask[$i]);
foreach($key[1] as $k=>$v){
$k++;
$res[$v]=$this->getoneval($this->text,$mask[$i],$k);
}
}
return $res;
}

public function getoneval($v,$ch,$num) {
if(preg_match_all("#".$ch."#si",$v,$te)) return $te[$num];
return "";
}
}

А теперь разберём текст данного класса по полочкам и разберёмся как им пользоваться.

Первым делом мы описали переменные, которые мы будем использовать в работе

1
2
3
public $link="";
public $text="";
public $arr=array();

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

маски необходимо задавать массивом ввиде

$mask = array(’0′ =>’{body}’)

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

Далее мы пишем функцию, которая будет непосредственно находить наши слова

1
2
3
4
    public function getoneval($v,$ch,$num) {
    if(preg_match_all("#".$ch."#si",$v,$te)) return $te[$num];
    return "";
    }

ну думаю тут коментарии излишне.

Теперь нам нужна функция, которая будетзаписывать и выводить результат сгласно заданным маскам поиска. для этого мы пишем следующий код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public function Find() {
    $mask=explode("\r\n",$this->mask);
    $res=array();
    for($i=0;$i
    preg_match_all("#{(.+?)}#",$mask[$i],$key);
    $mask[$i]=quotemeta($mask[$i]);
    $mask[$i]=preg_replace("#{(.+?)}#","(.*?)",$mask[$i]);
    foreach($key[1] as $k=>$v){
    $k++;
    $res[$v]=$this->getoneval($this->text,$mask[$i],$k);
    }
    }
    return $res;
    }

эта функция будет собирать все данные в кучу и возвращать массив данных разобрать который думаю проблем не составит :)

И последнее и самое главное, как использовать класс:

1
2
3
$first_param = array('0' => '{link_content}',
'1' => 'test{test_content}test');
$links = new Parser($first_param, $text);

print_r($links->result); — эта строка выведет нам весь массив в данном примере это будутурлы и их описание

a




    Один комментарий на "PHP парсер"

    max2 сказал:
    29.05.2010

    Вот если бы на javascript парсер…

    Продолжение дискуссии на форуме: link


    Вы можете продолжить обсуждение этой статьи на форуме


    Имя : 
    Почта : 
    Сайт : 
    Комментарий : 

    Проверка комментариев включена. Прежде чем Ваши комментарии будут опубликованы пройдет какое-то время.

    Создание сайта - Echo-group Раскрутка сайтов