Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

regexp. Помогите составить выражение

26K
17 апреля 2007 года
demian
5 / / 18.03.2007
помогите плиз текст между тегами span вытянуть

<td>Телефон:</td>
<td>
<span>(945) 132-5252 ТУТ ЕЩЕ ТЕКСТ МОЖЕТ БЫТЬ</span>


Мой нерабочий вариант:

$content =~ m!Телефон.*?</td><td><span>(.*?)</span>!;
13K
17 апреля 2007 года
whitehood
73 / / 02.11.2006
вот рабочий вариант:
 
Код:
$content =~ m!Телефон.*?</td>\s*<td>\s*<span>(.*?)</span>!s;

между <td> надо поставить \s* ибо там тоже могут тусоваться символы :) типо перевода строки
26K
17 апреля 2007 года
demian
5 / / 18.03.2007
спасибо за ответ
дело действительно в переводе строки. Но этот пример у меня тоже не работает :( Пытался еще разные варианты. Пока что не получается...
странно

Цитата: whitehood
вот рабочий вариант:
 
Код:
$content =~ m!Телефон.*?</td>\s*<td>\s*<span>(.*?)</span>!s;

между <td> надо поставить \s* ибо там тоже могут тусоваться символы :) типо перевода строки

26K
17 апреля 2007 года
demian
5 / / 18.03.2007
Если хтмл код из примера написать в одну строку, то Вам шаблон работает :(
А вот если с переводом строки- то всё еще не то.. :(
347
17 апреля 2007 года
Maniak
319 / / 05.11.2005
для таких проблем существует другая технология (могут возникнуть проблемы с кодировкой (каторые я еще почемуто не решил:) )):
 
Код:
$DOC=new DOMDocument("1.0", "windows-1251");
$DOC->loadHTML(file_get_contents("file.html"));
foreach($DOC->getElementsByTagName("span") as $Root){
print $Root->nodeValue."<br>\n";
}
16K
17 апреля 2007 года
unplugged
21 / / 27.11.2006
в данном случае быстрее и проще имхо использовать обычные регекспы (и не будет проблем с кодировкой ;))
в перле это можно сделать например так:
 
Код:
my $html = <<HTML;
<td>Телефон:</td>
<td>
<span>(945) 32-5252 ТУТ ЕЩЕ<a> ТТ</a> МОЖЕТ БЫТЬ</span>
HTML
my $word;
if ($html =~ m!<span>(.*)(?=</span>)!s) { $word = $1 }
print $html, "\n", $word, "\n";
26K
17 апреля 2007 года
demian
5 / / 18.03.2007
гениально... Особенно если учесть, что в html страницы тегов span может быть больше 200.
Как вытащить текст между двумя тегами я прекрасно знаю.
$content =~ m!Телефон.*?</td><td><span>(.*?)</span>!;
Обратите внимания пожалуйста на суть проблемы.
Поиск идет не между двумя тегами, а сразу на 4х строчках...

<td>Телефон2:</td>
<td>
<span>(945) 32-5252 ТУТ ЕЩЕ<a> ТТ</a> МОЖЕТ БЫТЬ</span>
<td>Телефон3:</td>
<td>
<span>(945) 32-5252 ТУТ ЕЩЕ<a> ТТ</a> МОЖЕТ БЫТЬ</span>
<td>Телефон4:</td>
<td>
<span>(945) 32-5252 ТУТ ЕЩЕ<a> ТТ</a> МОЖЕТ БЫТЬ</span>
<td>Телефон-Nое число-:</td>
<td>
<span>(945) 32-5252 ТУТ ЕЩЕ<a> ТТ</a> МОЖЕТ БЫТЬ</span>

Вот теперь попробуйте достать содержимое между тегами :)
16K
17 апреля 2007 года
unplugged
21 / / 27.11.2006
Если между тегами span есть только текст - можно сделать так:
Код:
my $html = <<HTML;
<td>Телефон:</td>
<td><span>1 (945) 32-5252 ТУТ ЕЩЕ ТТ МОasdf234ЖЕТ БЫТЬ</span>
<td>Телефон3:</td>
<td>
<span>2 (945) 32-5252 ТУТ ЕЩЕ ТТasdf234 МОЖЕТ БЫТЬ</span>
<td>Телефон4:</td>
<td>
<span>3 (945) 32-5252 ТУТ ЕЩЕ ТТ МОЖЕТ БЫТЬ</span>
<td>Телефон-Nое число-:</td>
<td>
<span>4 (945) 32-5252 ТУТ ЕsdfЩЕ ТТ МОЖЕТ БЫТЬ</span>
HTML
my $word;
my @words = ($html =~ m!<span>([^\<]*)</span>!sg);
$,="\n";
print "\n", @words, "\n";

если есть другие теги - пока не знаю как заставить его выбрать между двумя ближайшими span - выбирает по максимуму между первым <span> и последним </span> (( есть идеи? ;)
239
18 апреля 2007 года
Dolonet
1.7K / / 20.05.2000
Квантификатор жадности:
 
Код:
if ($html =~ m!<span>(.*?)(?=</span>)!s) { $word = $1 }
print $html, "\n", $word, "\n";
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог