С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 4
1

Парсинг и замена номеров телефонов

12.11.2012, 17:46. Показов 5656. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Есть кусок HTML:
HTML5
1
2
3
4
<footer id="footer">
    <div class="numh">Телефоны<br /> для связи</div>
    <div class="numh">80 (95) 887-98-88<br />+380 (50) 4-0444-87</div>
</footer>
Нужно при соблюдении одного условия запустить скрипт и заменить номера телефонов. Я придумал такое, но почему-то скрипт возвращает исходные значения без замены. Гляньте пожалуйста, что не так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$string = file_get_contents('./index.html', FILE_USE_INCLUDE_PATH);
$pattern = '/[0-9]{2}\s\S[0-9]{2}\S\s[0-9]{1,3}\S[0-9]{2,4}\S[0-9]{2}/';
$raw = preg_match($pattern, $string, $raw);
    
$filter_pattern = '/\d/';
$replacement = "";
$filter = preg_replace($filter_pattern, $replacement, $raw);
    
$mytel = "80961231212";
$newtel_pattern = '/\D/';
$newtel_replacement = $mytel;
$newtel = preg_replace($newtel_pattern, $newtel_replacement, $filter);
 
header("Location: http://www.xxxxxx.com.ua/index.html");
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2012, 17:46
Ответы с готовыми решениями:

Как правильно составить маску для поиска номеров телефонов?
Вобщем хочу написать парсер который будет ходить по сайту и собирать телефонные номера. Да вот...

Сортировка номеров телефонов
Привет, друзья-программисты! Очень нужна Ваша помощь! Не так давно в сфере программирования,...

Фильтрация номеров телефонов, Excel
Привет всем! Есть база номеров в 50000 телефонов, операторы записывали номера по разному например...

Поиск по базе номеров телефонов
Есть база номеров телефонов, нужно узнать владельца каждого номера телефона через Facebook (если он...

5
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
12.11.2012, 18:08 2
цитата из мануала
Возвращаемые значения
Функция preg_match() возвращает количество найденных соответствий шаблона pattern. Это может быть 0 (совпадения не найдены) и 1, поскольку preg_match() прекращает свою работу после первого найденного совпадения. Функция же preg_match_all(), наоборот, будет продолжать свою работу пока не достигнет конца subject. Функция preg_match() возвращает FALSE в случае, если во время выполнения возникли какие-либо ошибки.
1
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 4
12.11.2012, 19:18  [ТС] 3
Я понял свою ошибку (по крайней мере ее часть), после изменения кода получается:
PHP
1
2
3
4
$raw = [B]preg_match_all[/B]($pattern, $string, $raw);
$filter_pattern = '/\d/';
$replacement = "";
$filter = preg_replace($filter_pattern, $replacement, [B]$raw[0][/B]);
Но все равно ничего не получается.
0
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
12.11.2012, 19:25 4
посмотрите эту функцию http://php.net/manual/ru/funct... llback.php
1
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 4
13.11.2012, 10:24  [ТС] 5
Тут оказывается в другом вопрос. Я составил регулярное выражение:
PHP
1
/[0-9]{2}[\s][\S][0-9]{2}[\S][\s][0-9][-0-9][0-9][-0-9][0-9]{2}[-][0-9]{2}/
для парсинга этих двух номеров:
HTML5
1
80 (95) 887-98-88<br />+380 (50) 4-0444-87
, но она их не парсит. Подскажите, где я ошибся.
0
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 4
14.11.2012, 14:00  [ТС] 6
Скачал RegexBuddy, там написал регулярку. Тестирую - все меняет, добавляю, заливаю на сервер - ничего не работает. Вот текст PHP:
PHP
1
2
3
4
$string = file_get_contents('http://www.xxxxxxx.com.ua/index.html', FILE_USE_INCLUDE_PATH);
$pattern = '/\d{2}\s\S\d{2}\S\s[\d \S]{9}/';
$out = preg_replace($pattern, '80 (12) 123-12-12', $string);
header("Location: http://www.xxxxxxx.com.ua/index.html");
Думаю проблема в том, что $out не задействован, но как переписать не знаю. Если есть идеи - пишите, буду благодарен.

Добавлено через 1 час 40 минут
Вопрос решен. Окончательный код таков:
PHP
1
2
3
4
5
$string = file_get_contents('./index.html', NULL, NULL);
$pattern = '/\d{2}\s\S\d{2}\S\s[\d \S]{9}/';
$string = preg_replace($pattern, '80 (12) 123-12-12', $string);
file_put_contents('index.html', $string);
header("Location: http://www.xxxxxx.com.ua/index.html");
0
14.11.2012, 14:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2012, 14:00
Помогаю со студенческими работами здесь

Удалить записи без номеров телефонов
Задан массив записей с полями: фамилия, номер телефона, не сортирован( номера телефона может и не...

Парсер телефонов номеров перестал работать
Приветствую всех уважаемых при уважаемых форумчан и низкий, нижайший поклон вам. Сложилась...

Регулярные выражения: извлечение из файла номеров телефонов
Реализовать программу, извлекающую из файла номера телефонов. Требования: 1. исходный текст, из...

Построить двунаправленный неупорядоченный список номеров телефонов (консоль)
Построить двунаправленный неупорядоченный список номеров телефонов: семизначных – абонентов;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru