【问题标题】:Filter XML / HTML Code tags with RegEx使用 RegEx 过滤 XML / HTML 代码标签
【发布时间】:2012-04-03 11:45:22
【问题描述】:

以下场景:

Given 是一个类似 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

这可以用正则表达式来实现吗?

亲切的问候 某人

【问题讨论】:

标签: xml regex perl


【解决方案1】:

您不能使用 RegExps 解析 HTML,也不应该为 XML 解析。

但是拥有一个有效的 XML 文档,您可以使用正则表达式来替换标签。此处有效意味着 在不属于标签的地方被转义。然后应该可以删除所有匹配的内容

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

我不熟悉 perl,但我相信你可以适应那个正则表达式。

【讨论】:

  • 实际上,&gt; 不需要转义即可使 XML 格式正确。见w3.org/TR/REC-xml/#syntax:"右尖括号(>)可以用字符串表示"> ",并且为了兼容性,必须使用 " > 进行转义。 " 或出现在字符串 " ]]> " 中的字符引用,当该字符串未标记 CDATA 部分的结尾时。" 这可能是,也可能不是挑剔:&lt;script&gt;if( 1 &gt; 0) { alert( "booh!"); }&lt;/script&gt; 是例如格式良好。
  • 好的,那么找到标签就更难了。
【解决方案2】:

脚本:

#!/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

【讨论】:

    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多