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

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

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Вытащить данные из строки
 
 автор: TuX   (20.03.2007 в 01:51)   письмо автору
 
 

Только начал учить регулярные - очень туго идет :( Не подскажите, как из следующей строки вытащить: - дату (19.03)
- адрес ссылки (allnews/798348)
- Наименование ссылки (Любой текст)?

И каждое из 3-х значений закинуть в отдельный массив?


<tr><td width=1% align=right valign=top nowrap>&nbsp;<span class=newsdate>19.03 14:05</span></td><td width=99% align=left valign=top><a class=newsline href="/allnews/798348/" target="news798348">Любой текст</a></td></tr>

   
 
 автор: cheops   (20.03.2007 в 02:25)   письмо автору
 
   для: TuX   (20.03.2007 в 01:51)
 

Можно поступить следующем образом
<?php
  $str 
'<tr><td width=1% align=right valign=top nowrap>&nbsp;
          <span class=newsdate>19.03 14:05</span></td><td width=99% 
          align=left valign=top><a class=newsline href="/allnews/798348/" 
          target="news798348">Любой текст</a></td></tr>'
;
  
$pattern "|([\d]{2}\.[\d]{2})[^>]+>[^>]+>[^>]+><a.+?href=\"([^\"]+)\"[^>]+>([^<]+)<|i";
  
preg_match_all($pattern$str$out);
  unset(
$out[0]);
  echo 
"<pre>";
  
print_r($out);
  echo 
"</pre>";
?>

$out - многомерный массив, чтобы взять нужные вам массивы обращайтесь к $out[1], $out[2] и $out[3].

   
 
 автор: TuX   (20.03.2007 в 02:53)   письмо автору
 
   для: cheops   (20.03.2007 в 02:25)
 

Огромное спасибо! В целях обучения, не могли бы вы расшифровать регулярное выражение

([\d]{2}\.[\d]{2})[^>]+>[^>]+>[^>]+><a.+?href=\"([^\"]+)\"[^>]+>([^<]+)<


Я его например читаю так:

только две цифры подряд, потом точка, потом опять только 2 цифры подряд, потом любой символ любое количество раз, кроме символа >, потом символ >, потом любой символ любое количество раз, кроме символа >, потом символ >, потом любой символ любое количество раз, кроме символа >, потом символ >, потом не понимаю <a.+? , потом href=\" (зпочему слеш мне понятно.), потом любой символ любое количество раз кроме символа ", потом кавычка ", потом любой символ любое количество раз, кроме символа >, потом символ >, потом любой символ любое количество раз, кроме символа <, потом <

не понял что делает вот это - .+?


Ну и еще вопросик, почему пишется все время \d, а не [0-9], разницы ведь нет?

   
 
 автор: cheops   (20.03.2007 в 03:39)   письмо автору
 
   для: TuX   (20.03.2007 в 02:53)
 

1) Слеш перед \" потому что строка заключена в двойные кавычки - будет синтаксическая ошибка, если не экранировать.
2) . - это произвольный символ, .+ - как можно большее количество произвольных символов (не менее одной штуки), .+? - как можно меньшее количество произвольных символов (не менее одной штуки) - вопрос после .+ и .* - инвертирует жадность регулярных выражений.

>Ну и еще вопросик, почему пишется все время \d, а не [0-9], разницы ведь нет?
Не всегда пишется - оба варианта используются на равных, разницы действительно нет. Более того [0-9] пожалуй понадёжнее будет, так как не все диалекты регулярных выражений поддерживают \d. Классы символов удобны в других случаях, например, при замене пробельных символов \s или символов, образующих слово \w (попробуйте перечислить все символы во всех алфавитах - гораздо удобнее использовать \w).

   
 
 автор: TuX   (20.03.2007 в 03:50)   письмо автору
 
   для: cheops   (20.03.2007 в 03:39)
 

Все понял! Спасибо!

   
Rambler's Top100
вверх

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