regex - 如何在 Perl 中替换所有 HTML 编码的重音符号?

标签 regex perl string replace

我有以下情况:

有一种工具可以从 Web 界面获取 XSLT 并将 XSLT 嵌入到 XML 文件中(应该有人被解雇)。 “不幸的是”我在法语国家工作,因此 XSLT 有许多带有口音的单词。当 XSLT 嵌入到 XML 中时,该工具会将所有重音符号转换为其 HTML 代码(Iacute、igrave 等...)。

我的 Perl 代码正在从 XML 检索 XSLT,并使用 Xalan 命令行工具针对其他 XML 执行它。每次 XSLT 中出现重音时,Xalan 工具都会抛出异常。

我最初虽然做一个正则表达式来改变 XSLT usch 中的所有重音:

# & 在代码中被省略,因为它将在页面中呈现
$xslt =~s/Aacute;/Á/gso;
$xslt =~s/aacute;/á/gso;
$xslt =~s/Agrave;/À/gso;
$xslt =~s/Acirc;/Â/gso;
$xslt =~s/agrave;/à/gso;

但这样做意味着我必须为每个重音代码编写一个正则表达式....

我的问题是,是否可以在不为每个代码编写正则表达式的情况下执行此操作? (认为​​这是唯一的解决方案,让人想呕吐。)

顺便说一下,这个工具是 TeamSite,它很烂......

编辑:我忘了提到我需要一个仅限 Perl 的解决方案,安全性不允许我安装他们一周左右没有检查过的任何类型的库:(

最佳答案

您可以尝试类似 HTML::Entities .从 POD:

use HTML::Entities;
$a = "Våre norske tegn bør &#230res";
decode_entities($a);
#encode_entities($a, "\200-\377");  ## not needed for what you are doing

响应您的编辑,HTML::Entities 不在 perl 核心中。它可能仍安装在您的系统上,因为许多其他库都在使用它。您可以通过运行以下命令进行检查:
perl -MHTML::Entities -le 'print "If this prints, the it is installed"'

关于regex - 如何在 Perl 中替换所有 HTML 编码的重音符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/487855/

相关文章:

c#.net Regex - 需要找到一系列字符,然后替换其中的一个字符

c - strtof() 在 C 中产生奇怪的结果

perl - 您认为哪些模块会成为理想的 Perl 5 默认值?

linux - 如何检测脚本是否在虚拟机上运行?

java - 匹配 C 风格多行注释的正则表达式

java - Split 方法在 Java 数组中创建空元素

javascript - 替换正则表达式中以特定字符开头并以特定字符结尾的字符串

regex - 如何使用正则表达式在 VS Code 的每行末尾添加一个字符串?

PHP:如何去掉多列行中双引号内的逗号?

perl - 如何在 Build.PL 中测试系统库先决条件