Блог

Фрілансера

RSS
rss
Закладки

Сер

31

regexp: номер мобільного

категорія: parser, php

Наразі працюю над одним цікавим проектом і викладаю регулярку для парсинга мобільного номера і головне його видача у правильному форматі, тобто у форматі +380670000000.

$regexp = ‘/\+?\s?3?[-\s\(]*8?[-\s\(\)]*0[-\s\(\)]*(\d)[-\s\(\)]*(\d)[-\s\(\)]*(\d)[-\s]*(\d)[-\s]*(\d)[-\s]*(\d)[-\s]*(\d)[-\s]*(\d)[-\s]*(\d)[-\s]*/’;

Смисл полягає в тому, що на виході ми маємо масив цифр мобільного номера.
Залишається лише зліпити їх :)
Читати далі »

Гру

16

дужки, які тільки групують

категорія: php

Поговоримо про регулярні вирази (регулярку).
Візьмемо приклад:


$number = '+380670000000';
$aReturn = array();
$exp = "/^\+?3?((8039|8050|8063|8066|8067|8068|8093|8095|8096|8097|8098|8099)\d{7})$/";

preg_match($exp, $number, $aReturn);

print_r($aReturn);

Тут ми перевіряємо на валідність мобільний номер.
В результаті получимо:

Array
(
[0] => +380670000000
[1] => 80670000000
[2] => 8067
)

А навіщо нам $aReturn[2]???

Отже задача:
Потрібно в регулярці згрупувати елементи, але не потрібно їх запам’ятовувати для видачі.

Вихід із ситуації:


$number = '+380670000000';
$aReturn = array();
$exp = "/^\+?3?((?:8039|8050|8063|8066|8067|8068|8093|8095|8096|8097|8098|8099)\d{7})$/";

preg_match($exp, $number, $aReturn);

print_r($aReturn);

В результаті получимо:

Array
(
[0] => +380670000000
[1] => 80670000000
)

А відрізняється лише ?:
Тобто потрібно поставити ?: одразу після відкритих дужок, щоб вони не запам’ятовувались.

Сер

21

Парсер на PHP

категорія: parser, php

За час роботи на фрілансі було багато замовлень на написання парсерів. Відповідно назбиралось багато прикладів.
Сьогодні у Вас є можливість скачати приклади парсерів різної складності (ссилочка вкінці).

parser №1

DOMDocument
Завдання: спарсити футер.


error_reporting(E_ALL);

$data='http://sergunik.name/';
$data = urlencode(trim($data));

$doc = new DOMDocument();
@$doc->loadHTMLFile($data);

foreach($doc->getElementsByTagName('div') as $items) {
if($items->getAttribute('class') == 'footer') {
      print $items->nodeValue;
   }
}

Читати далі »

Блог фрілансера
Sergunik
2009-2010