【发布时间】:2015-07-19 12:18:13
【问题描述】:
所以我目前正在使用代码:
$mystring =~ s/&/&/g;
查找并替换我的字符串变量中的所有与符号 (&),并将它们替换为与符号的 XML 实体引用 (&)。问题是,我只想替换不是 XML 实体引用的一部分的 & 符号。
例如,假设我在此之前进行了查找和替换以使所有“>”成为“>”。
它有一个 & 符号,但我不希望代码的第一位来替换它,因为它后面是 #62;。
排除“&#”可能还不够,因为数据中存在合法的可能性很小。那么我可以在正则表达式中排除&符号后跟“#__;”的位置吗?
另外,我要排除的具体三个示例是“&#44;”(逗号)、“&#62;”(>)和“&#60;”(<)。这些是我唯一要做的其他查找和替换,所以如果有办法专门排除这些,那也可以。
谢谢!
【问题讨论】:
-
您可以使用
HTML::Entities将HTML 实体编码为文本。这样你就不必想出自己的正则表达式,意识到你错过了一个实体,用第二个正则表达式返回,等等。 -
您没有指定这是 XML 还是 HTML。我假设是 XML,但两者的想法是相似的。根据需要进行修复。
-
Mpost 用户使用
&amp;而不是&#38;。虽然完全有效,但我什至从未见过&#38;。 -
一旦混合,real & 和 special & & 符号实际上在理论上是不可区分的。你应该早点逃脱它们。
-
你问错问题了。您应该一次性完成所有实体编码。字符串应该是实体编码的,或者不是。混合只是自找麻烦。