regexp. Помогите составить выражение
<td>Телефон:</td>
<td>
<span>(945) 132-5252 ТУТ ЕЩЕ ТЕКСТ МОЖЕТ БЫТЬ</span>
Мой нерабочий вариант:
$content =~ m!Телефон.*?</td><td><span>(.*?)</span>!;
Код:
$content =~ m!Телефон.*?</td>\s*<td>\s*<span>(.*?)</span>!s;
между <td> надо поставить \s* ибо там тоже могут тусоваться символы :) типо перевода строки
дело действительно в переводе строки. Но этот пример у меня тоже не работает :( Пытался еще разные варианты. Пока что не получается...
странно
Цитата: whitehood
вот рабочий вариант:
между <td> надо поставить \s* ибо там тоже могут тусоваться символы :) типо перевода строки
Код:
$content =~ m!Телефон.*?</td>\s*<td>\s*<span>(.*?)</span>!s;
между <td> надо поставить \s* ибо там тоже могут тусоваться символы :) типо перевода строки
А вот если с переводом строки- то всё еще не то.. :(
Код:
$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";
}
$DOC->loadHTML(file_get_contents("file.html"));
foreach($DOC->getElementsByTagName("span") as $Root){
print $Root->nodeValue."<br>\n";
}
в перле это можно сделать например так:
Код:
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";
<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";
Как вытащить текст между двумя тегами я прекрасно знаю.
$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>
Вот теперь попробуйте достать содержимое между тегами :)
Код:
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";
<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> (( есть идеи? ;)
Код:
if ($html =~ m!<span>(.*?)(?=</span>)!s) { $word = $1 }
print $html, "\n", $word, "\n";
print $html, "\n", $word, "\n";