Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Регулярка / 25 сообщений из 34, страница 1 из 2
12.12.2012, 11:52
    #38075450
Varo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Есть страничка

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
</head>

<body>
<p class="text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. <p>Cras vestibulum tempor leo auctor placerat.</p> <p>Ut vel ipsum enim.</p> Nam ac neque enim. <b>Pellentesque enim diam, fermentum commodo aliquet in, venenatis non quam.</b> Praesent dictum accumsan nulla, ac rutrum ipsum pharetra eu. Donec aliquam, risus a volutpat rutrum, nunc purus mattis leo, eget feugiat odio elit non diam.
</p>

<p class="text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. <p>Cras vestibulum tempor leo auctor placerat.</p> <p>Ut vel ipsum enim.</p> Nam ac neque enim. <b>Pellentesque enim diam, fermentum commodo aliquet in, venenatis non quam.</b> Praesent dictum accumsan nulla, ac rutrum ipsum pharetra eu. Donec aliquam, risus a volutpat rutrum, nunc purus mattis leo, eget feugiat odio elit non diam.
</p>
</body>

</html>



нужно вырезать все теги между
Код: html
1.
<p class="text"></p>



Т.е. должно получится так

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
</head>

<body>
<p class="text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vestibulum tempor leo auctor placerat. Ut vel ipsum enim. Nam ac neque enim. Pellentesque enim diam, fermentum commodo aliquet in, venenatis non quam. Praesent dictum accumsan nulla, ac rutrum ipsum pharetra eu. Donec aliquam, risus a volutpat rutrum, nunc purus mattis leo, eget feugiat odio elit non diam.
</p>

<p class="text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vestibulum tempor leo auctor placerat. Ut vel ipsum enim. Nam ac neque enim. Pellentesque enim diam, fermentum commodo aliquet in, venenatis non quam. Praesent dictum accumsan nulla, ac rutrum ipsum pharetra eu. Donec aliquam, risus a volutpat rutrum, nunc purus mattis leo, eget feugiat odio elit non diam.
</p>
</body>

</html>



Помогите пожалуйста с регулярным выражением
...
Рейтинг: 0 / 0
12.12.2012, 13:39
    #38075712
phpz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Varo,

Для этой цели лучше всего подойдет strip_tags.
...
Рейтинг: 0 / 0
12.12.2012, 13:43
    #38075720
Varo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
phpz,

Функция удаления тегов данном случае - не подходит. По крайней мере в одиночном использовании.
...
Рейтинг: 0 / 0
12.12.2012, 13:57
    #38075747
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
preg_replace_callback в помощь
...
Рейтинг: 0 / 0
12.12.2012, 14:20
    #38075786
Varo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Hett,

Это как раз то что нужно, но вот только у меня не получается составить правильное регулярное выражение, все ломается на первом </p>

По этому и прошу помощи
...
Рейтинг: 0 / 0
12.12.2012, 14:22
    #38075793
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
хотя регуляркой тут сложновато, возможно, будет, лучше юзать парсеры HTML
...
Рейтинг: 0 / 0
12.12.2012, 14:47
    #38075848
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Самому теперь интересно, по крайней мере у меня не получилось это сделать с помощью DOMDocument, т.к. он не правильно понимает вложенные теги P, потому что внутри тега P не может содержаться блочных тегов, коим он сами и является. Где вы взяли такой не валидный HTML ?
...
Рейтинг: 0 / 0
12.12.2012, 15:57
    #38076013
Сергей111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Если окаймить <p class="text"> <div>-ами, то получается. А так, действительно надо исправлять HTML-код.

<script type="text/javascript">
$(document).ready(function()
{
$('.text').each(function() {
$(this).parent().html('<p class="text">'+$(this).parent().text()+'</p>')
});alert($('.text').parent().parent().html());

});
</script>

<body>
<div>
<p class="text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. <p>Cras vestibulum tempor leo auctor placerat.</p> <p>Ut vel ipsum enim.</p> Nam ac neque enim. <b>Pellentesque enim diam, fermentum commodo aliquet in, venenatis non quam.</b> Praesent dictum accumsan nulla, ac rutrum ipsum pharetra eu. Donec aliquam, risus a volutpat rutrum, nunc purus mattis leo, eget feugiat odio elit non diam.
</p>
</div>

<div>
<p class="text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. <p>Cras vestibulum tempor leo auctor placerat.</p> <p>Ut vel ipsum enim.</p> Nam ac neque enim. <b>Pellentesque enim diam, fermentum commodo aliquet in, venenatis non quam.</b> Praesent dictum accumsan nulla, ac rutrum ipsum pharetra eu. Donec aliquam, risus a volutpat rutrum, nunc purus mattis leo, eget feugiat odio elit non diam.
</p>
</div>
</body>
...
Рейтинг: 0 / 0
12.12.2012, 16:00
    #38076019
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
VaroПомогите пожалуйста с регулярным выражением
У вас произвольная вложенность. Почитайтедля чего регулярки существуют и для чего их не стоит за уши притягивать.
...
Рейтинг: 0 / 0
12.12.2012, 17:46
    #38076261
регуляка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
чтоб не создавать еще одну тему помогите
Код: php
1.
2.
3.
4.
5.
6.
7.
<?php
$subject ="Text texttext abcd  -  1011620007288, blabla 21.10.2011";
echo $subject."<hr>";
  $pattern = '/(?P<idno>[0-9]{5,13})?(?P<day>[0-9]{2})/i'; 
  preg_match($pattern, $subject, $matches); 
  print_r($matches); 
?>

Хочу вырезать 1011620007288 и дату 21.10.2011. Но не могу создать регулярку :(
...
Рейтинг: 0 / 0
13.12.2012, 10:34
    #38077115
Varo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
HettСамому теперь интересно, по крайней мере у меня не получилось это сделать с помощью DOMDocument, т.к. он не правильно понимает вложенные теги P, потому что внутри тега P не может содержаться блочных тегов, коим он сами и является. Где вы взяли такой не валидный HTML ?А так, действительно надо исправлять HTML-код.
Не имею возможности управлять кодом. Hett, вот именно по этому, я уже 3й день ломаю голову над этого простой с виду головоломкой -)

Почитайтедля чего регулярки существуют и для чего их не стоит за уши притягивать.
И вам хорошего дня.
...
Рейтинг: 0 / 0
13.12.2012, 10:38
    #38077128
Varo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
регулякачтоб не создавать еще одну тему помогите
Код: php
1.
2.
3.
4.
5.
6.
7.
<?php
$subject ="Text texttext abcd  -  1011620007288, blabla 21.10.2011";
echo $subject."<hr>";
  $pattern = '/(?P<idno>[0-9]{5,13})?(?P<day>[0-9]{2})/i'; 
  preg_match($pattern, $subject, $matches); 
  print_r($matches); 
?>

Хочу вырезать 1011620007288 и дату 21.10.2011. Но не могу создать регулярку :(
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?php
  $subject = "Text texttext abcd  -  101162000, blabla 01.10.2011 blablabla 22.10.2012";
  echo $subject."<hr>";

  $pattern = "/[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4}/";
  preg_match_all($pattern, $subject, $matches);
  print_r($matches);

  $pattern = "/[0-9]{5,13}/";
  preg_match_all($pattern, $subject, $matches);
  print_r($matches);

?>
...
Рейтинг: 0 / 0
13.12.2012, 13:02
    #38077501
Сергей111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
авторHett, вот именно по этому
Может наивно, но что это означает?
...
Рейтинг: 0 / 0
13.12.2012, 14:30
    #38077751
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
я хз, просто придумал
...
Рейтинг: 0 / 0
13.12.2012, 18:54
    #38078368
stopkran
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Varo,

конкретно для первого примера ([13617842]) можно использовать такую схему:

1) разбить текст - $arr = explode('<p class="text">', $str);

2) почистить массив - foreach ($arr as $key => &$value) $value = strip_tags($value);

3) добавить элементам массива любые окаймляющие тэги (хоть те же <p class="text">)...
...
Рейтинг: 0 / 0
13.12.2012, 20:07
    #38078452
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Я ниче не понял, но почему-то мне кажется вы так вообще все тэги поудаляете.
...
Рейтинг: 0 / 0
13.12.2012, 21:30
    #38078556
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Если HTML гарантированно корректен и если иных особенностей нет, т.е. задача строго :

разбить на p-эшки, у которых класс text и вернуть содержимое этих p-эшек

То начало в принципе подходит:
Код: php
1.
$arr = explode('<p class="text">', $str);



Ну а дальше не надо ничего стрипать, просто убрать лишнее, т.е. закрывающие </p> в конце строк. И всё.
Но решение грязное и чувствительное, т.е. черновое.
...
Рейтинг: 0 / 0
13.12.2012, 21:32
    #38078557
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Достаточно в каком-то из <p class="text"> добавить лишних пробелов и explode нас разочарует :)

Но если разбивать регуляркой, то уже будет живучее.
...
Рейтинг: 0 / 0
14.12.2012, 07:39
    #38078836
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Не подходит для XHTML, и если уж HTML и валидный, то лучше все сделать с помощью DOMDocument
...
Рейтинг: 0 / 0
14.12.2012, 13:18
    #38079303
Kreol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Чтоб не плодить тем, подскажите как регулярным выбрать
из шаблона
key1 ""

"string1 "

"string2 "

key2 ""

Все что между key1"" ---- key2"" то есть выбрать строчки. Спасибо
...
Рейтинг: 0 / 0
14.12.2012, 13:22
    #38079307
Kreol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
и как выбрать отдельно строки 1 и 2 из такого шаблона, ну тоесть результат 1 = строка 1 + строка 2; результат 2 - строка 1; результат 3 = строка 2.
...
Рейтинг: 0 / 0
14.12.2012, 14:48
    #38079509
stopkran
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Hett,
естественно, поудаляю. И получу голые данные. Которые потом можно обрамлять в любые нужные тэги.
...
Рейтинг: 0 / 0
14.12.2012, 15:31
    #38079591
madbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
...
Рейтинг: 0 / 0
14.12.2012, 18:48
    #38079979
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
stopkranHett,
естественно, поудаляю. И получу голые данные. Которые потом можно обрамлять в любые нужные тэги.
все теги можно и без цикла удалить
...
Рейтинг: 0 / 0
15.12.2012, 11:33
    #38080439
stopkran
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Регулярка
Hett,
без цикла это будут не массив данных а строка .
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Регулярка / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]