Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите разобраться в рег. выражениях

Сообщения:  [1-10]   [11-20] 

 
 автор: cheops   (05.08.2006 в 10:50)   письмо автору
 
   для: Lelik   (05.08.2006 в 04:20)
 

Лучше под новые вопросы заводить новые темы - URL не самая лучшая задача в регулярных выражениях, универсального решения нет, нужно под конкретную задачу подстраиваться.

   
 
 автор: Lelik   (05.08.2006 в 04:20)   письмо автору
 
   для: cheops   (02.08.2006 в 10:33)
 

Спасибо, и для закрепления - мне надо проверить вводимые данные, а точнее урл сайта, чтоб он был в виде www.site.domain, а также указать запрещенные символы(например слэши).

>PS Такие здоровые листинги лучше прикреплять в виде файла

Прошу прощенья. Следующий раз учту :)

   
 
 автор: cheops   (02.08.2006 в 10:33)   письмо автору
 
   для: Lelik   (02.08.2006 в 02:39)
 

Можно поступить следующим образом
<?php  
  $content 
file_get_contents("get.txt");
  
preg_match_all("|<item>[\s]*<title>([^<]+)</title>[\s]*<link>([^<]+)</link>[\s]*<description>([^<]+)</description>[\s]*<pubDate>([^<]+)</pubDate>[\s]*<guid>([^<]+)</guid>|isU"$content$out);
  echo 
"Число записей - ".count($out[1])."<br>";
  unset(
$out[0]);
  echo 
"<pre>";
  
print_r($out);
  echo 
"</pre>";
?>

PS Такие здоровые листинги лучше прикреплять в виде файла

   
 
 автор: Lelik   (02.08.2006 в 02:39)   письмо автору
 
   для: cheops   (01.08.2006 в 22:18)
 

из файла, например такого :

<?xml version="1.0" encoding="windows-1251"?>
<rss xmlns:yandex="http://news.yandex.ru" version="2.0">
<channel>
<title>Яндекс.Новости: Киев - Главные новости</title>
<link>http://news.yandex.ru/Kiev/index.html</link>
<description>Первая в России служба автоматической обработки и систематизации новостей. Сообщения ведущих российских и мировых СМИ. Обновление в режиме реального времени 24 часа в сутки.</description>
<image>
<url>http://company.yandex.ru/i/50x23.gif</url><link>http://news.yandex.ru</link><title>Яндекс.Новости</title>
</image>
<lastBuildDate>Mon, 31 Jul 2006 10:07:57 +0400</lastBuildDate>
<item>
<title>Сколько зарабатывают киевляне?</title>
<link>http://news.yandex.ru/yandsearch?cl4url=www.investor.net.ua/ru/news/info%2D8482.html&amp;country=Russia</link>
<description>Среднемесячная заработная плата по Киеву за июнь 2006 года составляла 1784,64 грн., при этом, сравнительно с маем этого года она выросла на 8,4%. Такие данные обнародовал ... &lt;br&gt;Для сравнения среднемесячная заработная плата по Украине за июнь 2006 года составляет 1063,59 грн. и сравнительно с маем этого года выросла на 6%. А наименее ... &lt;br&gt;</description>
<pubDate>Thu, 27 Jul 2006 09:20:29 +0400</pubDate>
<guid>http://news.yandex.ru/yandsearch?cl4url=www.investor.net.ua/ru/news/info%2D8482.html&amp;country=Russia</guid>
</item>
</channel>
</rss>


Вывести одновременно содержимое всех блоков(текст между тегов итем) или указанное количество новостей.

   
 
 автор: cheops   (01.08.2006 в 22:18)   письмо автору
 
   для: Lelik   (01.08.2006 в 16:26)
 

Чего-то не очень понятно... если честно.

   
 
 автор: Lelik   (01.08.2006 в 16:26)   письмо автору
 
   для: cheops   (30.07.2006 в 22:42)
 

я пробовал применить к ленте новостей на яндексе, так выводит новости только из одного подобного блока, как выводить новости из всех блоков, а потом и из заданного количества блоков

   
 
 автор: cheops   (30.07.2006 в 22:42)   письмо автору
 
   для: Lelik   (30.07.2006 в 17:05)
 

Да, для этого следует заключить тот фрагмент, который вам требуется в круглые скобки и использовать в качестве индекса массива $regs номер круглых скобок
<?php     
  $txt 
"авда жыв авыа ыв <tag>some text in this string</tag> ваыва <tag>вы</tag> вы вы вы в";  
  if(
preg_match("|<tag>(.+?)<\/tag>|"$txt$regs))     
  {     
     echo 
$regs[1]."<br>";     
  }     
?>

   
 
 автор: Lelik   (30.07.2006 в 17:05)   письмо автору
 
   для: cheops   (30.07.2006 в 14:58)
 

>Однако если в тексте будет несколько тэгов нужно будет использовать либо модификатор
>U либо конструкцию .+? для инвертирования жадности

<?php    
  $txt 
"авда жыв авыа ыв <tag>some text in this string</tag> ваыва <tag>вы</tag> вы вы вы в"
  if(
preg_match("|<tag>.+?<\/tag>|"$txt$regs))    
  {    
     echo 
$regs[0]."<br>";    
  }    
?>

Да, но данный код выймет текст включая тэги, а можно без них?

   
 
 автор: cheops   (30.07.2006 в 14:58)   письмо автору
 
   для: Lelik   (30.07.2006 в 12:37)
 

Если вы используете скрипт
<?php   
  $txt 
"<tag>some text in this string</tag>";   
  if(
preg_match("|^<tag>.+<\/tag>$|"$txt$regs))   
  {   
     echo 
$regs[0]."<br>";   
  }   
?>

Он найдёт соотвествие только для строки, который начинается с <tag> и заканчивается </tag>
<tag>some text in this string</tag>

Например, строка
<tag>some text in this string</tag> ещё чего-то

Не будет соответствовать регулярному выражению. Если убрать привязку к началу ^ и концу строки $, можно будет искать тэги в произвольном тексте
<?php   
  $txt 
"авда жыв авыа ыв <tag>some text in this string</tag> ваыва вы вы вы вы в";
  if(
preg_match("|<tag>.+<\/tag>|"$txt$regs))   
  {   
     echo 
$regs[0]."<br>";   
  }   
?>

Однако если в тексте будет несколько тэгов нужно будет использовать либо модификатор U либо конструкцию .+? для инвертирования жадности
<?php   
  $txt 
"авда жыв авыа ыв <tag>some text in this string</tag> ваыва <tag>вы</tag> вы вы вы в";
  if(
preg_match("|<tag>.+?<\/tag>|"$txt$regs))   
  {   
     echo 
$regs[0]."<br>";   
  }   
?>

   
 
 автор: Lelik   (30.07.2006 в 12:37)   письмо автору
 
   для: cheops   (30.07.2006 в 12:32)
 

для начала <tag> и </tag>, но может добавиться <?xml version="1.0" encoding="UTF-8" ?>

   

Сообщения:  [1-10]   [11-20] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования