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

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

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

 

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

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

тема: match всех строк внутри определенной таблицы
 
 автор: mechanic   (29.04.2011 в 13:46)   письмо автору
 
 

Добрый день айтишники
возник вопрос по регулярке, который я не смог побороть
обобщенно звучит так: как внутри конкретного символьного окружения получить повторяющиеся блоки?
на примере выглядит так: из строки "baaaAb" получить [a, a, a, A] чем-то вроде ~b(a)*b~i
проблема в том, что при добавлении к регекспу окружения "b...b", выдирается только последняя A, а при выключении жадности - первая a

конкретная же задача - из таблицы c id="fruits" ОДНОЙ регуляркой получить все строки

<table id="fruits">
  <tr><td>1</td><td>apple</td></tr>
  <tr><td>2</td><td>banana</td></tr>
  <tr><td>3</td><td>melon</td></tr>
</table>

нужно иметь на выходе массив, содержащий номера п.п. и названия фруктов
пробовал так

$result = <<<EOF
<table id="fruits">
  <tr><td>1</td><td>apple</td></tr>
  <tr><td>2</td><td>banana</td></tr>
  <tr><td>3</td><td>melon</td></tr>
</table>
EOF;
$pattern = '~table id="fruits">(?:[\s]*<tr><td>(\d)</td><td>(.*)</td></tr>[\s]*)+~U';
preg_match_all($pattern, $result, $m);
var_dump($m);

на выходе с U

array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(54) "table id="fruits">
  <tr><td>1</td><td>apple</td></tr>"
  }
  [1]=>
  array(1) {
    [0]=>
    string(1) "1"
  }
  [2]=>
  array(1) {
    [0]=>
    string(5) "apple"
  }
}


без U

array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(128) "table id="fruits">
  <tr><td>1</td><td>apple</td></tr>
  <tr><td>2</td><td>banana</td></tr>
  <tr><td>3</td><td>melon</td></tr>
"
  }
  [1]=>
  array(1) {
    [0]=>
    string(1) "3"
  }
  [2]=>
  array(1) {
    [0]=>
    string(5) "melon"
  }
}

инет облазил, поиск по данному форуму тоже, pcre-мануалы сколько мог выкурил, задача то вроде простая, но мысли кончились, прошу помощи!

  Ответить  
 
 автор: cheops   (29.04.2011 в 14:49)   письмо автору
 
   для: mechanic   (29.04.2011 в 13:46)
 

Обычно её не решают при помощи универсального регулярного выражения - слишком сложно. Вырезают кусок строки, где нужно производить поиск и ищут в этом фрагменте.

  Ответить  
Rambler's Top100
вверх

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