Фильтруйте теги XML / HTML Code с помощью RegEx - PullRequest
0 голосов
/ 03 апреля 2012

следующий сценарий:

Данный XML-подобный документ:

<Root>  
<NotNeededTag style="color: #ABCDEF">With needed Text</NotNeededTag>  
Text here <Break/>  
<Bold> with bolded text </Bold>  
Next text <Italic> It's a kind <Bold> OF </Bold> M A G I C  
</Root>

Моя цель состоит в том, чтобы отфильтровать все теги, которые не выделены жирным шрифтом, курсивом и разрывом, нотекст в ненужных тегах должен быть сохранен:

With needed Text  
Text here <Break/>  
<Bold> with bolded text </Bold>  
Next text <Italic> It's a kind <Bold> OF </Bold> M A G I C

Возможно ли это реализовать с помощью регулярных выражений?

С уважением, sb

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Вы не можете анализировать HTML с RegExps, и вы не должны делать это и для XML.

Но имея действительный XML-документ, вы можете использовать регулярные выражения для замены тегов. Действительный означает здесь, что <и> экранированы, если они не принадлежат тегу. Тогда должна быть возможность удалить все, что соответствует

/<\/?(?!(Bold|Italic|Break)\s*\/?>)[^\s]+?>/

Я не знаком с Perl, но уверен, что вы можете адаптировать это регулярное выражение.

0 голосов
/ 03 апреля 2012

Сценарий:

#!/usr/bin/perl

use strict;
use warnings;

$/ = undef;
$_ = <main::DATA>;

s/<\/?(?:(?!bold|italic|break).)*?\/?>//ig;

print $_;

__DATA__
<Root>
<NotNeededTag style="color: #ABCDEF">With needed Text</NotNeededTag>
Text here <Break/>
<Bold> with bolded text </Bold>
Next text <Italic> It's a kind <Bold> OF </Bold> M A G I C

Выход:

With needed Text  
Text here <Break/>  
<Bold> with bolded text </Bold>  
Next text <Italic> It's a kind <Bold> OF </Bold> M A G I C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...