Консультация № 104673
08.10.2007, 13:05
0.00 руб.
0 3 3
Здравствуйте!
Не могу никак разобраться с регулярным выражением.
Есть страничка в переменнай с формой. Оттуда надо достать информацию со всех . у меня результат - пустая строчка.
Дайте рабочий код, или ссылочку на харошую статью по регулярным выражениям.
Спасибо.

Приложение:
preg_match_all("~<textarea[^<]+</textarea>~i",$page,$area, PREG_PATTERN_ORDER);вывод массива $area...<body><form><textarea name=tt ...>Этот текст надо извлечь</textarea>...</form>...<form name=f2>...<textarea name=n2 rows=4>Этот текст надо извлечь</textarea></form></body...

Обсуждение

Неизвестный
08.10.2007, 13:16
общий
это ответ
Здравствуйте, Райкин Сергей Александрович!
В приложении готовый код, а вот ссылочка на faq по регулярным выражениям

Результат работы скрипта, нужное находится в массиве $area[1]:
Array
(
[0] => Array
(
[0] => < name=tt ...>Этот текст надо извлечь</>
[1] => < name=n2 rows=4>Этот текст надо извлечь</>
)

[1] => Array
(
[0] => Этот текст надо извлечь
[1] => Этот текст надо извлечь
)

)

Приложение:
<?php$page =<<<HTML<body><form><textarea name=tt ...>Этот текст надо извлечь</textarea>...</form>...<form name=f2>...<textarea name=n2 rows=4>Этот текст надо извлечь</textarea></form></body...HTML;preg_match_all("/<textarea .*?>(.*?)<\/textarea>/i",$page,$area);print_r($area);?>
Неизвестный
08.10.2007, 13:18
общий
это ответ
Здравствуйте, Райкин Сергей Александрович!
Для :
< name=tt ...>Этот текст надо извлечь</>

Шаблон:
<.*name=tt.*>(.*)</>

Для:
< name=n2 rows=4>Этот текст надо извлечь</

Шаблон:

<.*name=n2.*>(.*)</>

Найденное значение будет хранится (в случае использования preg_match) в $arr[1]
Неизвестный
08.10.2007, 13:20
общий
это ответ
Здравствуйте, Райкин Сергей Александрович!

Попробуйте такой вариант (на оптимальность кода не претендую):

Приложение:
<?php$str = ‘...<body><form><textarea name=tt ...>1Этот текст надо извлечь1</textarea>...</form>...<form name=f2>...<textarea name=n2 rows=4>2Этот текст надо извлечь2</textarea></form></body...‘;$neededTexts = array();preg_match_all(‘/<textarea.*?<\/textarea>/‘, $str, $matches);foreach ($matches[0] as $m) { $neededTexts[] = preg_replace(‘/<\/?textarea[^>]*>/‘,‘‘, $m);}print_r($neededTexts);?>
Форма ответа