The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Вложеное регулярное выражение"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Perl)
Изначальное сообщение [ Отслеживать ]

"Вложеное регулярное выражение"  +/
Сообщение от zhukoviaemail (ok), 31-Мрт-17, 05:19 
Допустим есть строка вида:

<p>привет</p> &p_not& <p>привет1</p> <p>привет2</p> &p_not& <p>привет10</p>

Можно ли как то составить регулярное выражение чтобы удалить все теги <p> и </p> заключенные между &p_not& (удалить вместе с &p_not&), но при этом оставить <p> и </p> которые не входят в "скобки" &p_not&? Текст может быть очень длинным и "скобок" &p_not& может быть не одна. Есть ли вообще такая возможность?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Вложеное регулярное выражение"  +1 +/
Сообщение от Led (ok), 01-Апр-17, 01:25 
Да
Ответить | Правка | Наверх | Cообщить модератору

2. "Вложеное регулярное выражение"  +/
Сообщение от михалыч (ok), 01-Апр-17, 08:35 
> Допустим есть строка вида:
> <p>привет</p> &p_not& <p>привет1</p> <p>привет2</p> &p_not& <p>привет10</p>
> Можно ли как то составить регулярное выражение чтобы удалить все теги <p>
> и </p> заключенные между &p_not& (удалить вместе с &p_not&), но при
> этом оставить <p> и </p> которые не входят в "скобки" &p_not&?
> Текст может быть очень длинным и "скобок" &p_not& может быть не
> одна. Есть ли вообще такая возможность?

Я ничего не понял.
что в сухом остатке должно получиться?
это -

<p>привет</p><p>привет10</p>

?
тогда так:

echo '<p>привет</p> &p_not& <p>привет1</p> <p>привет2</p> &p_not& <p>привет10</p>' | perl -pe 's|(?<=\<\/p\>).*&p_not&.*&p_not&.*(?=\<p\>)||'

Ответить | Правка | Наверх | Cообщить модератору

3. "Вложеное регулярное выражение"  –1 +/
Сообщение от zhukoviaemail (ok), 01-Апр-17, 14:11 
> Я ничего не понял.
> что в сухом остатке должно получиться?
> это -
<p>привет</p><p>привет10</p>

> ?
> тогда так:
> echo '<p>привет</p> &p_not& <p>привет1</p> <p>привет2</p> &p_not& <p>привет10</p>'
> | perl -pe 's|(?<=\<\/p\>).*&p_not&.*&p_not&.*(?=\<p\>)||'

Нет должно получиться <p>привет</p> привет1 привет2 <p>привет10</p>
Т.е. убрать теги у тех слов что находятся внутри &p_not&.

Ответить | Правка | Наверх | Cообщить модератору

4. "Вложеное регулярное выражение"  –1 +/
Сообщение от zhukoviaemail (ok), 01-Апр-17, 14:11 
> Я ничего не понял.
> что в сухом остатке должно получиться?
> это -
<p>привет</p><p>привет10</p>

> ?
> тогда так:
> echo '<p>привет</p> &p_not& <p>привет1</p> <p>привет2</p> &p_not& <p>привет10</p>'
> | perl -pe 's|(?<=\<\/p\>).*&p_not&.*&p_not&.*(?=\<p\>)||'

Нет должно получиться <p>привет</p> привет1 привет2 <p>привет10</p>
Т.е. убрать теги у тех слов что находятся внутри &p_not&.

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

5. "Вложеное регулярное выражение"  +/
Сообщение от михалыч (ok), 01-Апр-17, 18:45 
> Нет должно получиться <p>привет</p> привет1 привет2 <p>привет10</p>
> Т.е. убрать теги у тех слов что находятся внутри &p_not&.

если теги не p работать не будет ))
| perl -pe 's/&p_not&|<.*?>//g' | perl -pe 's|(^\S+)(\s+.*\s+)(\S+$)|<p>$1</p>$2<p>$3</p>|'

Ответить | Правка | Наверх | Cообщить модератору

6. "Вложеное регулярное выражение"  +/
Сообщение от zhukoviaemail (ok), 03-Апр-17, 16:25 
>> Нет должно получиться <p>привет</p> привет1 привет2 <p>привет10</p>
>> Т.е. убрать теги у тех слов что находятся внутри &p_not&.
> если теги не p работать не будет ))
> | perl -pe 's/&p_not&|<.*?>//g' | perl -pe 's|(^\S+)(\s+.*\s+)(\S+$)|<p>$1</p>$2<p>$3</p>|'

Не знаю почему, но произошла обратная ситуация теги вне скобок удвоились
<p><p>hello</p></p> &p_not& <p>hello1</p> <p>hello2</p> &p_not& <p><p>hello10</p></p>


Ответить | Правка | Наверх | Cообщить модератору

7. "Вложеное регулярное выражение"  +/
Сообщение от михалыч (ok), 03-Апр-17, 18:26 
попробуй это
| perl -pe 's/(?\!^<.*?>.*?<.*?>)<.*?>(?=.*?&p_not&)|&p_not&//g' | perl -pe 's|^(<(.*?>).*?)(\s+.*)|$1</$2$3|'

от этих упреждающих проверок мозги закипят ))
Ответить | Правка | Наверх | Cообщить модератору

8. "Вложеное регулярное выражение"  +/
Сообщение от zhukoviaemail (ok), 05-Апр-17, 05:48 
Вообщем сделал вот так. Может кому понадобится.
s{(&p_not&)(.+?)\1}{($x=$2)=~s[</?p>][]mgs;$x}mgse
Спасибо большое за помощь.
Ответить | Правка | Наверх | Cообщить модератору

9. "Вложеное регулярное выражение"  +/
Сообщение от fred (??), 06-Мрт-26, 17:35 
#!/usr/bin/env perl

use strict;
use warnings;

# <p>hello</p> hello1 hello2 <p>hello10</p>
my $x;
$_ = "<p>hello</p> &p_not& <p>hello1</p> <p>hello2</p> &p_not& <p>hello10</p>
&p_not& <p>hello3</p> <p>hello4</p> &p_not& <p>hello15</p>";
s#&p_not& <p>(.*?)</p> <p>(.*?)</p> &p_not&#$1 $2#g;

print $_,"\n";


Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2026 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру