pHp регулярные выражения

12
[Удален]
1752

Здравствуйте. Столкнулся с такой проблемой. Есть такое выражение:

preg_match_all('#<span class="name">(.+?)</span>#is', $m1, $m2); 

Получается оно ищет всю инфу что заключена в тег <span class="name">, но так получилось что внутри этого тега есть ещё ссылка (тег <a>) и в итоге я получаю код вида:

<a href="ссылка" title="Название">Текст</a>

Но мне мне нужно получить просто текст, который содержится в этой ссылке.

Подскажите как можно получить именно текст ?)

siv1987
На сайте с 02.04.2009
Offline
427
#1

$i - условный счетчик

strip_tags($m2[$i][1]);

[Удален]
#2
tohenson:
Здравствуйте. Столкнулся с такой проблемой. Есть такое выражение:
preg_match_all('#<span class="name">(.+?)</span>#is', $m1, $m2); 

Получается оно ищет всю инфу что заключена в тег <span class="name">, но так получилось что внутри этого тега есть ещё ссылка (тег <a>) и в итоге я получаю код вида:
<a href="ссылка" title="Название">Текст</a>

Но мне мне нужно получить просто текст, который содержится в этой ссылке.
Подскажите как можно получить именно текст ?)

Ссылка всегда присутствует внутри span или когда как?

[Удален]
#3
siv1987:
$i - условный счетчик
strip_tags($m2[$i][1]);

Спасибо, то что надо.

Столкнулся с новой проблемой, мне нужно вытащить содержимое из таблицы, включая все теги в этой таблице (<td><th> и т.д.), таблица имеет такой вид:

<table class="class sort {list: [[9,1]]}">
Содержимое
</table>

Подскажите, какое должно быть регулярное выражения, чтобы вытащить содержимое этой таблицы. Ибо пишу preg_match_all('/<table class="class sort {list: [[9,1]]}">(.*)<\/table>/', $t, $g); и нефига)

С
На сайте с 19.08.2011
Offline
51
#4
tohenson:
Спасибо, то что надо.

Столкнулся с новой проблемой, мне нужно вытащить содержимое из таблицы, включая все теги в этой таблице (<td><th> и т.д.), таблица имеет такой вид:
<table class="class sort {list: [[9,1]]}">
Содержимое
</table>

Подскажите, какое должно быть регулярное выражения, чтобы вытащить содержимое этой таблицы. Ибо пишу preg_match_all('/<table class="class sort {list: [[9,1]]}">(.*)<\/table>/', $t, $g); и нефига)

Может имеет смысл посмотреть в сторону какого-нибудь nokogiri?

J
На сайте с 20.02.2014
Offline
120
jkm
#5

tohenson, а квадратные скобки кто за вас экранировать будет.

forest25
На сайте с 12.09.2009
Offline
67
#6

ТС, то что вы начали с регулярок конечно очень хорошо, но впоследствие на каждый новый участок кода вам придется сочинять новые регулярки (хотя плюс тут очевиден, в регулярках будете мастером =)), но если нужно что-то быстро спарсить советую вам библиотеку phpQuery.

Парсить можно прямо по css-селекторам + куча фич портированых из jQuery.

Единственно что - крупные участки кода лучше сперва делить на фрагменты и парсить отдельно.

VPS 512MB 20GB SSD KVM - 5$ (http://u.hmdw.me/digitalocean) | ИМХО о хостингах (http://u.hmdw.me/hosting)
siv1987
На сайте с 02.04.2009
Offline
427
#7

preg_match('/<table class="class sort \{list: \[\[9,1\]\]\}">(.*)<\/table>/s', $t, $g);

[Удален]
#8

Ребят, большое спасибо всем, особенно вам siv1987. Плюсы кинул :)

siv1987
На сайте с 02.04.2009
Offline
427
#9

(.*)<\/table> заменить на (.*?)<\/table>

SEO-MAN
На сайте с 25.06.2007
Offline
187
#10

А у меня такая проблема.

Хочу в регулярку загнать:

<div class="class1">Цитата:<div class="class2"><blockquote>текст цитаты</blockquote></div> нужный текст</div>
</td>

class2 встречается не всегда..

На выходе preg_match хочу получить:

Цитата: текст цитаты
<br>
нужный текст

Пока хватило на

$str_repl=array("\n");

$m1 = str_replace($str_repl,"",$m1);

preg_match_all('#<div class="class1">(.+?)</div></td>#is', $m1, $m2);

Потом уже в $m2 делаю strip_tags исключая blockquote

Форум сео (http://forum-seo.net) для новичков автоматическая регистрация в 30000 каталогах за 5$ (/ru/forum/157861) Нужна доработка 2 досок объявлений - avtopmr.net, pmrdom.com (вип объявления и удаление дублей)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий