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

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

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

 

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

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

тема: Ozxar, регулярные выражения
 
 автор: cheops   (29.11.2004 в 00:38)   письмо автору
 
 

Это продолжение темы http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=705...

Блин, что же это они Силу-то другим цветом выделили... Ну это ладно, можно обойти, меня вот какой вопрос мучает, я что-то никаких квадратных скобок не вижу :(

   
 
 автор: Данил   (29.11.2004 в 07:42)
 
   для: cheops   (29.11.2004 в 00:38)
 

У меня также вопрос к знатокам по регулярным выражениям. Есть у меня вот такая строкав коде пхп:
 eregi ("(>[0-9]+<)", $line, $numbers);

Смысл ее вытаскивать числа из вот такой строки ($line) с HTML таблицей:
<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0"><tr align="center"><td class="column_header">Drawing Date</td><td class="column_header" colspan="20">Winning Numbers</td></tr><tr align="center"><td class="column_data">Nov-27-2004</td><td class="column_data" width="20">2</td><td class="column_data" width="20">3</td><td class="column_data" width="20">10</td><td class="column_data" width="20">13</td><td class="column_data" width="20">14</td><td class="column_data" width="20">18</td><td class="column_data" width="20">23</td><td class="column_data" width="20">24</td><td class="column_data" width="20">26</td><td class="column_data" width="20">30</td><td class="column_data" width="20">38</td><td class="column_data" width="20">39</td><td class="column_data" width="20">59</td><td class="column_data" width="20">64</td><td class="column_data" width="20">66</td><td class="column_data" width="20">67</td><td class="column_data" width="20">69</td><td class="column_data" width="20">70</td><td class="column_data" width="20">75</td><td class="column_data" width="20">80</td></tr></table>

А проблема состоит в том, что eregi в массив $numbers закидывает только первуею искомую комбинацию ">2<", т.е $numbers [2], $numbers [3] и тд почему то нет! Что я делаю неправильно???

   
 
 автор: cheops   (29.11.2004 в 10:36)   письмо автору
 
   для: Данил   (29.11.2004 в 07:42)
 

Стандартные функции никто не долюбливает, так как у них много странностей и неудобный синтаксис, лучше воспользоваться регулярными выражениями Perl:
<?php
  $line 
'<table> ... </table>';
  
preg_match_all("|(>[\d]+<)|",$line,$matches);
  
print_r($matches);
?>


http://www.softtime.ru/group/id_group=3

   
 
 автор: Данил   (29.11.2004 в 11:51)
 
   для: cheops   (29.11.2004 в 10:36)
 

Спасибо, cheops, все задуманное получилось после того, как я допер, что массив $matches двумерный.

   
 
 автор: Ozxar   (29.11.2004 в 14:12)   письмо автору
 
   для: Данил   (29.11.2004 в 11:51)
 

А да, я забыл предупредить что цвет параметров может меняться
А вообше регистр букв влияет на обработку кода?

   
 
 автор: cheops (из ННГУ)   (29.11.2004 в 16:54)
 
   для: Ozxar   (29.11.2004 в 14:12)
 

Если после регулярного выражения стоит модификатор i :
"|регулярное выражение|i"

то поиск осуществляется без учёта регистра, если этого модификатора нет, то с учётом..

http://www.softtime.ru/dic/id_dic=134&id_group=3

   
 
 автор: Ozxar   (16.12.2004 в 03:31)   письмо автору
 
   для: cheops (из ННГУ)   (29.11.2004 в 16:54)
 

У меня иногда выползает совершенно другой результат. счем это может быть связано
вот код
   preg_match("|Сила:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)[^\(]*\(([\d]+)|i",$text,$matches);
   if(isset($matches[2]))
   {
   $sil = $matches[2];
   }
   else {
        preg_match("|Сила:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)|i",$text,$matches);
       $sil = $matches[1];}
 // echo "Сила - ".$sil."<br>";
  preg_match("|Ловкость:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)[^\(]*\(([\d]+)|i",$text,$matches);
  if(isset($matches[2]))
   {
   $lov = $matches[2];
   }
   else {
        preg_match("|Ловкость:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)|i",$text,$matches);
       $lov = $matches[1];}
 // echo "Ловкость - ".$lov."<br>";
  preg_match("|Удача:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)[^\(]*\(([\d]+)|i",$text,$matches);
  if(isset($matches[2]))
   {
   $uda = $matches[2];
   }
   else {
        preg_match("|Удача:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)|i",$text,$matches);
       $uda = $matches[1];}
//  echo "Удача - ".$uda."<br>";
  preg_match("|Здоровье:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)[^\(]*\(([\d]+)|i",$text,$matches);
  if(isset($matches[2]))
   {
   $zdrav = $matches[2];
   }
   else {
        preg_match("|Здоровье:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)|i",$text,$matches);
       $zdrav = $matches[1];}
//  echo "Здоровье - ".$zdrav."<br>";
  preg_match("|Знания:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)[^\(]*\(([\d]+)|i",$text,$matches);
  if(isset($matches[2]))
   {
   $zna = $matches[2];
   }
   else {
        preg_match("|Знания:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)|i",$text,$matches);
       $zna = $matches[1];}
 // echo "Знания - ".$zna."<br>";
  preg_match("|Мудрость:<[^<]*<[^<]*<[^<]*<[^>]*>&nbsp;([\d]+)[^\(]*\(([\d]+)|i",$text,$matches);
  if(isset($matches[2]))
   {
   $mud = $matches[2];
   }

   
 
 автор: Ozxar   (16.12.2004 в 03:38)   письмо автору
 
   для: Ozxar   (16.12.2004 в 03:31)
 

вот например отсюда
http://www.neverlands.ru/playerinfo.php?playername=Spellfighter
Здоровье: оказалось равное 10 а на деле всего 9

   
 
 автор: cheops   (16.12.2004 в 09:55)   письмо автору
 
   для: Ozxar   (16.12.2004 в 03:38)
 

Немного подправил, а именно добавл после каждого регуляного выражения
<?php
  
unset($matches);
?>

а так же, поправил в каждой из позиций первое регулярное выражение на:
|Сила:<[^<]*<[^<]*<[^<]*<[^>]*> ([\d]+)[^\(<]*\(([\d]+)|i

   
Rambler's Top100
вверх

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