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 » » Вопросы новичков » Не работает регулярное выражение.

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

1. lraido - 16 Августа, 2011 - 12:25:28 - перейти к сообщению
Здравствуйте, уважаемые профессиоалы. Улыбка


Из вполне санкцанированного парсера с одного проекта в другой переходят данные. Улыбка


CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3.                 <table width="98%" border = 0  align="center" cellpadding="0" cellspacing="0" bordercolor = >
  4.                   <tr>
  5.                   <td width="87%" align="center"> <div id="outer"><div id="wrapper" style="width:100%;">
  6. <div id="header">
  7. PNR Pax Details</div>
  8. <div id="main" class="dataTable">
  9. <table cellpadding="0" cellspacing="0" border="0" style="width:100%;">
  10. <tr class="evenrow">
  11. <td style="width:10%">Select PAX</td>
  12. <td style="width:20%">Name</td>
  13. <td style="width:20%">Surname</td>
  14. <td style="width:20%">Gender</td>
  15. <td style="width:15%">Date of birth</td>
  16. <td style="width:3%">FF</td>
  17. <td style="width:7%"></td>
  18. </tr>
  19. <tr>
  20. <td style="height:2px;" colspan="7"></td></tr>
  21. <tr class="oddRowBlack ">
  22. <td valign="top"  style=""><input type="radio" name="PAXISN" value="66090070" checked>
  23. </td>
  24. <td valign="top"  style="">DAVIT</td>
  25. <td valign="top"  style="">TCHUMBURIDZE</td>
  26. <td valign="top"  style="">Mr.</td>
  27. <td valign="top"  style=""></td>
  28. <td valign="top"  style=""></td>
  29. <td valign="top"  style=""><input type="checkbox" id="PAX66090070" name="PAX66090070"  value="T" ></td>
  30. </tr>
  31. </table>
  32. </div>
  33. <div id="footer"> </div>
  34. </div>
  35. </div>
  36. </td>
  37.                   </tr>
  38.             </table><p>
  39.  
  40.  


Чтобы взять содержимое из


CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. <tr class="oddRowBlack ">
  4. <td valign="top"  style=""><input type="radio" name="PAXISN" value="66090070" checked>
  5. </td>
  6. <td valign="top"  style="">DAVIT</td>
  7. <td valign="top"  style="">TCHUMBURIDZE</td>
  8. <td valign="top"  style="">Mr.</td>
  9. <td valign="top"  style=""></td>
  10. <td valign="top"  style=""></td>
  11. <td valign="top"  style=""><input type="checkbox" id="PAX66090070" name="PAX66090070"  value="T" ></td>
  12. </tr>
  13.  
  14.  



Пишу следующее регулярное выражение.

$data1 - пришедший код


CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. preg_match_all('|<tr class="oddRowBlack ">(.*)</tr>|',$data1,$tourist_rows,0);
  4.  
  5.  


И ничего не выводит. Огорчение

Стоит записать

preg_match_all('|<td valign="top" style="">(.*)</td>|',$data1,$tourist_rows,0);

Начинает выводить, но ещё прихватывает кучу всего, что недолжно. Однако


Как взять содержимое этого тэга? А ещё лучше содержимое td в этом tr.

Помогите пожалуйста. Улыбка
2. DeepVarvar - 16 Августа, 2011 - 12:33:37 - перейти к сообщению
| - это спецсимвол "или", им нельзя ограничивать паттерн
3. lraido - 16 Августа, 2011 - 12:39:10 - перейти к сообщению
DeepVarvar пишет:
| - это спецсимвол "или", им нельзя ограничивать паттерн


| - да, он ограничивает область.
4. Мелкий - 16 Августа, 2011 - 12:41:42 - перейти к сообщению
DeepVarvar пишет:
| - это спецсимвол "или", им нельзя ограничивать паттерн

Можно. Ограничивать можно всем, чем угодно (ну кроме alphanumeric и backslash). Но в регулярке этот символ свою функцию потеряет. Например:


lraido, * по-умолчанию жадная и хватает всё, до чего дотягивается. Про жадность см. тут: http://php.su/lessons/?lesson_17
5. lraido - 16 Августа, 2011 - 12:46:22 - перейти к сообщению
Мелкий пишет:
DeepVarvar пишет:
| - это спецсимвол "или", им нельзя ограничивать паттерн

Можно. Ограничивать можно всем, чем угодно (ну кроме alphanumeric и backslash). Но в регулярке этот символ свою функцию потеряет. Например:


lraido, * по-умолчанию жадная и хватает всё, до чего дотягивается. Про жадность см. тут: http://php.su/lessons/?lesson_17


Значит так?Ему все равно, может неправильная реакция на TR?
PHP:
скопировать код в буфер обмена
  1. |<tr class="oddRowBlack ">(.*)</tr>.*|


Беру примеры отсюда.

http://text[dot]md/primery-reguljarn[dot][dot][dot]razhenij-na-php/

За основу

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. if (preg_match('|<title.*?>(.*)</title>|sei', $str, $arr)) $title = $arr[1];
  4.    else $title='';
  5.  


а что такое sei?
6. DeepVarvar - 16 Августа, 2011 - 13:28:31 - перейти к сообщению
Мелкий пишет:
Ограничивать можно
только потом не забывать экранировать.

lraido хотел бы побеседовать по ICQ, но тебя там просто не бывает.
А предложение в силе. Сегодня после 20:00 по москве выйти в асю сможешь?
7. lraido - 16 Августа, 2011 - 13:51:54 - перейти к сообщению
DeepVarvar пишет:
Мелкий пишет:
Ограничивать можно
только потом не забывать экранировать.

lraido хотел бы побеседовать по ICQ, но тебя там просто не бывает.
А предложение в силе. Сегодня после 20:00 по москве выйти в асю сможешь?





В итоге - не получается, а надо!

Решение


PHP:
скопировать код в буфер обмена
  1. |<tr class="oddRowBlack ">(.*?)</tr>|s


То есть:

добавляем s в конец выражения.

 

Powered by ExBB FM 1.0 RC1