Помогите пожалуйста с регуляркой

E1
На сайте с 26.06.2013
Offline
0
1220

нужно чтобы из такой строки: <h1>2 x <a href="/story.php?title=War-Thunder_1000-%D0%97%D0%BE%D0%BB%D0%BE%D1%82%D1%8B%D1%85-%D0%BE%D1%80%D0%BB%D0%BE%D0%B2">War Thunder - 1000 Золотых орлов</a></h1>

вырезалось только это(парсилось регуляркой): War Thunder - 1000 Золотых орлов

есть такая регулярка: <h1>(.*?)</a></h1> , но к сожалению он парсит только так:


2 x <a href="/story.php?title=War-Thunder_1000-%D0%97%D0%BE%D0%BB%D0%BE%D1%82%D1%8B%D1%85-%D0%BE%D1%80%D0%BB%D0%BE%D0%B2">War Thunder - 1000 Золотых орлов
IL
На сайте с 20.04.2007
Offline
435
#1

<h1>.+<a[^>]+>(.*?)</a></h1>
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
L
На сайте с 07.12.2007
Offline
351
#2

<a[^>]*>(.*?)</a>

E1
На сайте с 26.06.2013
Offline
0
#3
ivan-lev:
<h1>.+<a[^>]+>(.*?)</a></h1>

Благодарю, но не парсит эту строку: <h1> 2 x <a href="/story.php?title=War-Thunder_1000-%D0%97%D0%BE%D0%BB%D0%BE%D1%82%D1%8B%D1%85-%D0%BE%D1%80%D0%BB%D0%BE%D0%B2">War Thunder - 1000 Золотых орлов</a></h1>

DV
На сайте с 01.05.2010
Offline
644
#4

$text = preg_replace('%<h1>(.*?)<a(.*?)>(.*?)</a></h1>%m', '$3', $text);
VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
E1
На сайте с 26.06.2013
Offline
0
#5
Ladycharm:
<a[^>]*>(.*?)</a>

не, не то, вообще весь текст перепарсило 😕

---------- Добавлено 26.06.2013 в 08:34 ----------

DenisVS:
$text = preg_replace('%<h1>(.*?)<a(.*?)>(.*?)</a></h1>%m', '$3', $text);


только так парсит:
=======Покупки=======



2 x

походу, самая первая регулярка была правильнее:

=======Покупки=======
War Thunder - Глобальная Бета
War Thunder - Продвинутый набор &quot;Дора&quot;
War Thunder - Доступ в Бета-тест


НО

не парсит такую строку:
<h1>2 x <a href="/story.php?title=War-Thunder_1000-%D0%97%D0%BE%D0%BB%D0%BE%D1%82%D1%8B%D1%85-%D0%BE%D1%80%D0%BB%D0%BE%D0%B2">War Thunder - 1000 Золотых орлов</a></h1>

а другие без 2x парсит....
____________
Ну или хотя бы чтобы этот 2x не парсило,а название покупки: War Thunder - 1000 Золотых орлов парсило
L
На сайте с 07.12.2007
Offline
351
#6
egorea1999:
не, не то, вообще весь текст перепарсило

Показали бы исходный кусок html-кода - там, похоже, переносы строк есть внутри или атрибуты в <h1>, или 2 тега <a> внутри H1.

Продолжаем сеанс телепатии и реверсивной инженерии - эту регулярку попробуйте:

preg_replace('|<h1[^>]*>.*?<a[^>]*>(.*?)</a>\s*</h1>|i', "\$1", $html-код)

PS: Если "вообще весь текст перепарсило" - значит под регулярку не нашлось совпадений.

E1
На сайте с 26.06.2013
Offline
0
#7
Ladycharm:
Показали бы кусок html-кода - там, похоже, переносы строк есть внутри или атрибуты в <h1>, или 2 тега <a> внутри H1.

Продолжаем сеанс телепатии - эту регулярку попробуйте:
preg_replace('|<h1[^>]*>.*?<a[^>]*>(.*?)</a>\s*</h1>|i', "\$1", $html-код)

http://rghost.ru/private/47022907/6e16a78318da56c52f7cb7dc57ca8757

вот html код

-----------

УРАААА

ВАША РЕГУЛЯРКА ПОДОШЛААА, спасибо большое!

L
На сайте с 07.12.2007
Offline
351
#8
egorea1999:
ВАША РЕГУЛЯРКА ПОДОШЛААА, спасибо большое!

Вы не сказали, что бывают <h1>2 x<a>...</a></h1> и бывают пустые <h1><a>...</a></h1>.

Регулярка от ivan-lev тоже рабочая, там первый + на * заменить(чтобы пустые попадали): <h1>.*<a[^>]+>(.*?)</a></h1>

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