用于<>的Perl正则表达式[]

时间:2010-06-11 20:20:11

标签: xml regex perl soap

所以我试图将一个XML文件读入Perl中的字符串并将其作为SOAP消息的一部分发送。我知道这不是理想的,因为有SOAP方法可以发送文件,但是,我只能使用已设置的SOAP,并且它没有设置为带文件支持的发送。

因此我需要解析标记标记<>并用[]替换它们。这样做的最佳方式是什么?

4 个答案:

答案 0 :(得分:3)

如果简单地将<替换为[而将>替换为]对您不起作用(可能是因为尖端括号出现在某个地方的CDATA部分中不想替换,那么你可能不会从这里的正则表达中获利。正则表达式不适合匹配XML等非常规语言。

您可能会搜索<([^>]+)>并将其替换为[$1]

$subject =~ s/<([^>]+)>/[$1]/g;

答案 1 :(得分:2)

像这样简单的事情能为你起作用吗?

$a=~y/<>/[]/;

y执行一对一替换。 &lt; 变为 [&gt; 变为] The perlop documentation更详细地解释了它。

答案 2 :(得分:2)

如果使用Base64呢?

答案 3 :(得分:1)

请问有人不会想到海豹?

正如其他人已经指出的那样,在答案和评论中,只要您的数据变得足够复杂以包含[ / {,使用正则表达式执行此操作就会导致问题{1}}或] / <个字符。一旦发生这种情况,任何简单的正则表达式都会破坏,你需要将它重新绑定在一起,希望它能在再次打破之前跛行一段时间或者用真正的XML解析器和/或更好的方法重新实现它SOAP实现。

OTOH,leonbloy建议使用base64编码你的数据实际上是一个非常好的建议。我没有想到这一点,它应该与正确的SOAP实现一样好,但需要注意的是发送的数据会更大,如果你需要进行线级调试,可能会更难解释内容。