Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Автор: sancher
Дата сообщения: 25.06.2010 18:18
добрый вечер
помогите, пожалуйста, с регулярными выражениями
есть очень большой файл
в котором есть повторения не строк, а подстрок
например,

domain.ru
domain.ru/1
domain.ru/2
domain.ru/3
www.domain2.ru
www.domain2.ru/1

мне нужно оставить только domain.ru и www.domain2.ru, остальные строки нужно удалить
Автор: Mamay
Дата сообщения: 27.06.2010 13:44
sancher
файл выложи куда-то
Автор: sancher
Дата сообщения: 01.07.2010 22:36
Mamay
спасибо за отклик
файл нет смысл выкладывать, т.к. я очень чётко описал пример
копируем строки

Код: domain.ru
domain.ru/1
domain.ru/2
domain.ru/3
www.domain2.ru
www.domain2.ru/1
Автор: Cheery
Дата сообщения: 01.07.2010 23:27
sancher
используете простую регулярку на имя домена..
загоняете результаты в массив, потом применяете функцию array_unique
можно со strtolower, чтобы регистр не мешал
регулярка вида..
^(.*?)/?$
Автор: Hanut
Дата сообщения: 01.07.2010 23:57
sancher
Думаю такой вариант может помочь выбрать домен.

Код: /^([^/]+)/
Автор: sancher
Дата сообщения: 02.07.2010 19:44
Cheery,Hanut - спасибо вам
я новичёк
поэтому пока не понял как применить то, что вы мне написали
попробовал применить

Код: ^(.*?)/?$
Автор: Cheery
Дата сообщения: 02.07.2010 19:59
sancher

Цитата:
в notepad++
но он пишет, что ни одно совпадение не найдено

при чем тут notepad? вы регулярное выражение для php спрашиваете? вот в нем и применяйте.
Автор: sancher
Дата сообщения: 02.07.2010 20:36
Cheery
я спрашиваю, как можно решить мою задачу,
используя регулярные выражения
написал в эту тему, но php я не знаю =(
Автор: Cheery
Дата сообщения: 02.07.2010 20:42
sancher

Цитата:
я спрашиваю, как можно решить мою задачу,
используя регулярные выражения

вам и сказали - просто регуляркой нельзя..
если знаете какой то язык, то и спрашивайте в теме по данному языку.
Автор: sancher
Дата сообщения: 02.07.2010 21:08
изучал C и JAVA
но не практикуюсь
поэтому сейчас не готов написать программу для моей задачи
жаль, что нельзя обойтись регулярными выражениями
Автор: Cheery
Дата сообщения: 02.07.2010 21:27
sancher

Код: <?php
$data=file('файл_с_данными.txt');
$domains=array();
foreach($data as $line)
{
if(preg_match('/^([^\/]+)/',trim($line),$matches))
$domains[]=$matches[0];
}
$domains=array_unique($domains);
file_put_contents('сохранить_результат_в_файл.txt',implode("\r\n",$domains));
?>
Автор: sancher
Дата сообщения: 02.07.2010 21:44
Cheery, спасибо тебе за помощь!
скачал php-5.3.2-nts-Win32-VC9-x86.msi
установил
скопировал твой скрипт в C:\1.php (написал 1.txt вместо файл_с_данными.txt и 2.txt
вместо сохранить_результат_в_файл.txt)
создал C:\1.txt со списком доменов
запустил cmd
написал php.exe C:\1.php
но файл 2.txt не появился =(
где мой косяк?
Автор: Cheery
Дата сообщения: 02.07.2010 21:59
sancher
php.exe -f C:\1.php
Автор: sancher
Дата сообщения: 02.07.2010 22:17
Cheery
Спасибо тебе большое!!!

Код: php.exe -f C:\1.php
Автор: UoRlAk
Дата сообщения: 06.07.2010 16:27
помогите плиз:

есть код:

Код:
<td class="t t28"><span title="Погода сейчас">+27 °C</span><b><i class="b-icon b-icon_term"><i></i></i></b></td>
<td><i class="b-wea-icon g-png"><img alt="" src="//i.yandex.st/weather/i/icons/n10.png"></i></td>
Автор: Cheery
Дата сообщения: 06.07.2010 20:10
UoRlAk

Код: <?php
$text=<<<END
<td class="t t28"><span title="Погода сейчас">+27 °C</span><b><i class="b-icon b-icon_term"><i></i></i></b></td>
<td><i class="b-wea-icon g-png"><img alt="" src="//i.yandex.st/weather/i/icons/n10.png"></i></td>
END;
$kartinka=preg_match("#weather/i/icons/(.*?)\"#i",$text,$matches);
print_r($matches);
?>
Автор: UoRlAk
Дата сообщения: 06.07.2010 20:18
Cheery к сожелению не работает..



Автор: Cheery
Дата сообщения: 06.07.2010 20:23
UoRlAk

Цитата:
к сожелению не работает....

все работает - смотрите $matches массив и берите из него название файла
Автор: UoRlAk
Дата сообщения: 06.07.2010 20:47
Cheery ну как отдельный скрипт да
а мне надо чтоб оно отбирало картинку и вставляло в нужное место

Вот вообщем весь код модуля:
Автор: Cheery
Дата сообщения: 06.07.2010 21:02
UoRlAk

Цитата:
ну как отдельный скрипт да
а мне надо чтоб оно отбирало картинку и вставляло в нужное место

и? голова совсем не работает????
preg_match("#weather/i/icons/(.*?)\"#i",$text,$matches);
$kartinka=$matches[1];
и все..
Автор: UoRlAk
Дата сообщения: 06.07.2010 22:43
Cheery
неповеришь
пробовал
но в итоге имеем все тоже самое

http://i072.radikal.ru/1007/6a/5f5b16c21e8d.png
Автор: Cheery
Дата сообщения: 06.07.2010 22:46
UoRlAk

Цитата:
но в итоге имеем все тоже самое

ну, а посмотреть какой путь к картинке получается и показать тут?
Автор: UoRlAk
Дата сообщения: 06.07.2010 22:50
исходный код страници на котороую должно выводится изображение (моей спарсеной страници):

<tbody>
<tr><td height="20">В небе: </td><td><img src="http://img.yandex.net/i/" align="left"> Переменная облачность</td></tr>
<tr><td style="padding-right: 5px;" height="20">Температура: </td><td> <font color="#ff0000"><b>+22°</b></font></td></tr>
</tbody>

Автор: Cheery
Дата сообщения: 06.07.2010 23:03
UoRlAk
значит вы привели неправильный изначальный код страницы для парсинга.. или неправильно использовали $kartinka
покажите как вставили этот кусок, что я привел выше
Автор: UoRlAk
Дата сообщения: 06.07.2010 23:20
Cheery

страница парсинга: http://pogoda.yandex.ru/33846/

вверху

вставил как Вы и написали

кажетса понял в чем проблема вместо
preg_match("#weather/i/icons/(.*?)\"#i",$text,$matches);
$kartinka=$matches[1];

надо так

preg_match("#weather/i/icons/(.*?)\"#i",$contents,$matches);
$kartinka=$matches[1];

щас проверю
Автор: Cheery
Дата сообщения: 07.07.2010 00:31
UoRlAk

Цитата:
надо так  

конечно же.. ну неужели остальные должны такие мелочи за вас додумывать?
Автор: virtuNBK
Дата сообщения: 07.07.2010 15:11
Добрый день форумчане
нужна помощь, с регуляркой.
есть текст строками вида

Код:
{"blocks":[{"id":"35744","data":[{"x":1441,"y":1784,"objects":[{"id":"3458427","type":13,"tooltip":[{"key":"v1","value":"gandalf04"},{"key":"v2","value":1},{"key":"v4","value":13480}],"actions":[2,6,5,4]}]},[{"x":1465,"y":1810,"objects":[{"id":"3464790","type":16,"tooltip":[{"key":"v1","value":"romomo"},{"key":"v2","value":3536},{"key":"v3","value":"ss_waffen"},{"key":"v4","value":13832}],"actions":[2,6,5,4]}]},"reload":[{"block":102,"timeout":60}]}
Автор: exhugo
Дата сообщения: 13.07.2010 18:01
Ребята, помогите пожалуйста решить задачку.

Дано:
Имеем блок текста где могут встречаться теги "a" с произвольными атрибутами.

Ожидается:
Нужно получить текст, где у каждого тега "a" проставлен аттрибут target="_blank" (если этого аттрибута небыло разумеется)

Спасибо каждому, кто найдет немного времени мне помочь.
Всем хорошего дня!

P.S. PHP
Автор: kolunya
Дата сообщения: 14.07.2010 09:41
Добрый день. Я зашёл в небольшой тупик. Почему-то не работает реглярное выражение в моём php скрипте.
необходимо распарсить такой блок текста и вытащить из него только цифры. Т.е. в итоге в примере должно получится: 6498503


Код:
<div id="searchSummary" class="summary">
Найдено 6<span style="font-size:60%"> </span>498<span style="font-size:60%"> </span>503 группы (выводятся 1-10)<span class='divider'>|</span><a href='gsearch.php?from=events' style='font-weight:normal'>к событиям</a>
</div>
Автор: kivan
Дата сообщения: 15.07.2010 15:23
kolunya

Код:
$html = strip_tags($html);
preg_match('/Найдено([\s*|\d+]+)груп/i', $html, $group_num);
$result = preg_replace('/\s/', '', $group_num[1]);
print $result;

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Xitami Web Server + PHP+ zend optimizer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.