此元素的一些内容< span class =“t39”> abcd< / span> 此元素周围的一些内容
Hello world < span class =“t39”> efgh< / span> 此元素周围的一些内容
围绕此元素的一些内容< span class =“t39”> ijk< / span> 围绕此元素的一些内容
此元素的一些内容< span class =“t39”>αβγδ< / span> 围绕这个要素的一些内容
Hello world &lt; span class =“t39”&gt;&amp;#949;&amp;#966;&amp;#978;&amp;#951;&lt; / span&gt; 此元素周围的一些内容<登记/>
围绕此元素的一些内容&lt; span class =“t39”&gt;&amp;#953;&amp;#962;&amp;#954;&amp;#955;&lt; / span&gt; 一些内容这个要素
实体转换只需要来处理html元素
中的内容我是perl编程的初学者。善意地指导这个问题。
答案 0 :(得分:0)
使用xsh,XML::LibXML的包装器,也可以处理html。
open :F html 1.html ;
for //span[@class="t39"] {
my $t = text();
$t = { join q(), map chr(848 + ord), split //, $t } ;
set . $t ;
}
save :b ;
输出略有不同:它使用实体的十六进制代码:
<html>
<body>Some content around this element <span class="t39">αβγδ</span> Some content around this element
Hello world <span class="t39">εζηθ</span> Some content around this element
Some content around this element <span class="t39">ικλ</span> Some content around this element
</body>
</html>
答案 1 :(得分:0)
嗯,你可以说,你想在“&gt;”之间编码。和'&lt;' (关闭和打开HTML括号 - 或者不管它们叫什么:))。在这种情况下,您可以使用正则表达式,如下所示:
sub do_something {
my $string = shift;
return $string." perl is awesome";
}
my $text = "some text <span blabla>my text</span>other text";
$text =~ s/>(.*)</">".do_something($1)."<"/e
使用=〜,您可以将“正则表达式”应用于变量。我在这里使用的形式是s / search_this / replace_it_for_this / e。 s /意味着替代。 &GT;&LT(*);意味着找到字符'&gt;'之间的任何内容和'&lt;'。 (更多内容:http://perldoc.perl.org/perlrequick.html)。
/ e开关允许您在正则表达式中执行perl函数。在正则表达式的'replace_for_this'部分,我们有“&gt;”。do_something($ 1)。“&lt;” 。它将用字符&gt;替换我们找到的字符串。然后是do_something函数的返回值,后跟字符&lt;。 do_something函数的参数中的$ 1是我们在正则表达式的“search_this”部分中找到的字符串(由于parenteses而被保存到$ 1。
对于实际的编码..你需要编码所有的字符,或只是一些特殊的字符?在后一种情况下,我建议你看一下这个模块:http://metacpan.org/pod/HTML::Entities。就是这样。
答案 2 :(得分:0)
正如所说,使用perl库更好,因为正则表达式解析平衡文本非常糟糕
有用的库
HTML :: Parser完整,但对初学者来说并不容易。
HTML :: TokeParser :: Simple对于初学者来说非常简单
如果你喜欢一些有趣的正则表达式,你也可以使用下面的代码
my (@res) = grep { !/span/i } $str =~ m/<(span)[^>]*> #memorize span and find attributes
(.+?) #minimum search
<\/\1> #\1 is for span memorized
/gmixs;
grep delete first memorized search =&gt;跨度
整个搜索结果都是数组中的。
如果您的标签是嵌套的,则无法使用。正则表达式不起作用。
样品: &LT; DIV&GT;&LT; DIV&GT; texte&LT; / DIV&GT;&LT; / DIV&GT;