代码之家  ›  专栏  ›  技术社区  ›  Blaine Mucklow

perl正则表达式[]for<>

  •  0
  • Blaine Mucklow  · 技术社区  · 16 年前

    因此,我尝试将XML文件读取到Perl中的字符串中,并将其作为SOAP消息的一部分发送。我知道这是不理想的,因为有一些SOAP发送文件的方法,但是,我只限于使用设置好的SOAP,并且它没有设置为使用文件支持进行发送。

    因此,我需要分析标记并将其替换为[]。最好的方法是什么?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Robert Wohlfarth    16 年前

    像这样简单的东西对你有用吗?

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

    y 执行一对一替换。 < 变成 [ > 变成 ] . The perlop documentation 更详细地解释它。

        2
  •  3
  •   Tim Pietzcker    16 年前

    如果只是更换 < 通过 [ > 通过 ] 不适合你(可能是因为尖括号出现在某个你不想替换的CDATA部分中),那么你可能不会从这里的regex中获得太多的利润。正则表达式不适合与非正则语言(如XML)匹配。

    你可能会逃避寻找 <([^>]+)> 把它换成 [$1] :

    $subject =~ s/<([^>]+)>/[$1]/g;
    
        3
  •  2
  •   leonbloy    16 年前

    用什么呢 Base64 相反?

        4
  •  1
  •   Dave Sherohman    16 年前

    有人会不会想起小海豹?

    正如其他人在回答和评论中已经指出的那样,使用regex执行此操作 一旦您的数据变得足够复杂,包括 [ / ] < / > 字符。一旦发生这种情况,任何一个简单的regex都将中断,您需要将它重新打包起来,希望它在再次中断之前能够缓慢地运行一段时间,或者使用真正的XML解析器和/或更好的SOAP实现重新实现它。

    奥思,Leonbloy关于base64编码你的数据的建议实际上是一个很好的建议。我没有想到这一点,它应该和一个适当的SOAP实现一样有效,但需要注意的是,发送的数据会更大,如果需要进行线级调试,那么解释内容可能会更困难。