Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поиск в файле по маске
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Поиск в файле по маске

Страниц (1): [1]
 

1. xsh - 10 Августа, 2011 - 13:52:25 - перейти к сообщению
Здравствуйте. В PHP совсем новичок. Просьба помочь с написанием скрипта, если и не написать за меня, то хотя бы указать в какую сторону копать.
Имеется исходный .txt файл из которого скриптом надо выдернуть названия доменов и вывести их в новый файл либо же перезаписать этот.
В исходном файле имена доменов (вида domain.com либо просто ссылка без www и http://) располагаются каждый по одному на строчку как и должны, проблему составляют сотни мусорных и пустых ненужных строк, которые нужно отсеять.
Так же нужно как то учесть что в файле домены хоть и разные, но искать думаю надо по принципу если в строчке есть что-то типа .ru .com .net то строчка подходит и отбирается.
Фактически из файла надо отобрать строчки с ссылками.
Искал решение в сети, пробовал то что находил, не помогало.
2. DeepVarvar - 10 Августа, 2011 - 14:07:36 - перейти к сообщению
А можно содержимое файла увидеть?
3. xsh - 10 Августа, 2011 - 14:18:51 - перейти к сообщению
DeepVarvar пишет:
А можно содержимое файла увидеть?

пожалуйста, файл примерно такого вида:

CODE (htmlphp):
скопировать код в буфер обмена
  1. ID: 761770 · 343533854 | whois: 10.08.1998
  2. Ур. 2 · Фото
  3. YACA категория: Культура > ... > Художественное фото
  4. WLBLGBL YACADMOZYAPGC
  5. soprotivlenie.org
  6.  
  7. ID: 761740 · 343403438 | whois: 15.11.2006
  8. Ур. 2 · Новости и СМИ
  9. YACA категория: Общество > ... > Защита гражданских прав
  10. WLBLGBL YACADMOZYAPGC
  11. transmap.ru/articles/3
  12.  
  13. ID: 761777 · 343546894 | whois: 20.11.2007
  14. Ур. 2 · Товары и услуги
  15. YACA категория: Бизнес > ... > Экспедирование и перевозка грузов
  16. WLBLGBL YACADMOZYAPGC
  17. photographer.ru

и т.д.
4. ams - 10 Августа, 2011 - 14:50:07 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $file = file('aa.txt');
  3. foreach($file as $v)
  4. {
  5.         if (preg_match('//*регулярное выражение*//i',$v))
  6.                 echo $v;
  7. }
  8.  


В регулярных я не очень Улыбка
5. DeepVarvar - 10 Августа, 2011 - 15:55:52 - перейти к сообщению
ams еще короче
PHP:
скопировать код в буфер обмена
  1. $file = file('aa.txt');
  2. preg_match_all('//*регулярное выражение*//i',$file,$matches);

xsh вам осталось только регулярку найти сюда.
У меня гдето была, писать и думать некогда в данный момент, не могу отвлечься и на поиск...
6. xsh - 10 Августа, 2011 - 16:11:36 - перейти к сообщению
собственно вот что написал, но скрипт не работает, где ошибся?

PHP:
скопировать код в буфер обмена
  1.     $file = file('domains.txt');
  2.     preg_match_all('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i',$file,$matches);
  3. echo $matches;
7. DeepVarvar - 10 Августа, 2011 - 16:54:51 - перейти к сообщению

Это массив
(Добавление)
А!!!! и не file("domains.txt"); а file_get_contents("domains.txt");
8. xsh - 10 Августа, 2011 - 16:59:01 - перейти к сообщению
DeepVarvar я явно что-то не то делаю

PHP:
скопировать код в буфер обмена
  1.         $file = file_get_contents("domains.txt");
  2.         preg_match_all('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i',$file,$matches);
  3.     var_dump($matches);

PHP Warning: preg_match_all(): Unknown modifier '/' in /var/www/1.php on line 3
NULL
и у меня наверное регулярка еще не совсем та
(Добавление)
попробовал с этой регуляркой /[a-z0-9_\.]{4,}/i скрипт работает но теперь в результаты попадает лишняя инфа, попробую подобрать регулярку и дописать чтобы в файл записывалось
9. dzubchik - 10 Августа, 2011 - 17:18:46 - перейти к сообщению
xsh пишет:
DeepVarvar я явно что-то не то делаю

PHP:
скопировать код в буфер обмена
  1.         $file = file_get_contents("domains.txt");
  2.         preg_match_all('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i',$file,$matches);
  3.     var_dump($matches);

PHP Warning: preg_match_all(): Unknown modifier '/' in /var/www/1.php on line 3
NULL
и у меня наверное регулярка еще не совсем та
(Добавление)
попробовал с этой регуляркой /[a-z0-9_\.]{4,}/i скрипт работает но теперь в результаты попадает лишняя инфа, попробую подобрать регулярку и дописать чтобы в файл записывалось

а разве не нужно экранировать /
10. xsh - 10 Августа, 2011 - 17:26:30 - перейти к сообщению
dzubchik знать бы еще как..сейчас посмотрю..
PHP:
скопировать код в буфер обмена
  1.  
  2. $file = file_get_contents("domains.txt");
  3. preg_match_all('/[a-z0-9_\.]{4,}/i',$file,$matches);
  4. file_put_contents("result.txt",$matches."\r\n", FILE_APPEND);
  5. echo "Сохранено";

вот что сделал, но не работает.
(Добавление)
итак после экспериментов с регулярками и рендомными pressanykey получилось вот что:
PHP:
скопировать код в буфер обмена
  1. $file = file_get_contents("domains.txt");
  2. preg_match_all('/(([a-z0-9\-\.]+)?[a-z0-9\-]+(!?\.[a-z]{2,4}))/',$file,$matches);
  3. var_dump($matches[1]);

выводит с виду правильный список в консоль:
array(4) {
[0]=>
string(7) "hare.ru"
[1]=>
string(15) "fl0ra-fauna.net"
[2]=>
string(11) "wpskins.com"
[3]=>
string(12) "spbgunews.ru"
}
как можно это теперь сохранить в файл? пробовал так:
PHP:
скопировать код в буфер обмена
  1. file_put_contents("r.txt",$matches[1]."\r\n", FILE_APPEND);

не работает
11. DeepVarvar - 10 Августа, 2011 - 19:21:10 - перейти к сообщению
dzubchik пишет:
а разве не нужно экранировать /

нужно: \/\/
12. xsh - 10 Августа, 2011 - 19:29:12 - перейти к сообщению
DeepVarvar да вопрос с экранированием уже отпал, поскольку у меня все равно нет в ссылках http:// так что и экранировать не нужно, регулярку я подобрал, как мне это теперь правильно в файл записать?
13. DeepVarvar - 10 Августа, 2011 - 19:33:43 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $data = false;
  2. if (count($matches[1]) > 0)
  3.   foreach ($matches[1] as $item) $data .= "$item\r\n";
  4. if ($data) file_put_contents("result.txt",$data);
  5. else die("Ничего не найдено..");
14. xsh - 10 Августа, 2011 - 20:43:10 - перейти к сообщению
DeepVarvar, спасибо большое, работает

 

Powered by ExBB FM 1.0 RC1