需要正则表达式模式从日志文件中提取 xml 请求和响应

我有一个包含多个 xml 请求和响应的日志文件。我需要解析每个设置的请求/响应。由于我有限的正则表达式经验,我一直在尝试提出一个正则表达式模式来使用https://regex101.com/解析每组请求/响应,但我没有运气并决定我需要寻求一些帮助.


我正在使用 Linux PHP 7.1。


我的 xml 日志文件如下所示:`


***********************************************************************

API Client Address: 1.1.1.1

Begin API Request: 7/18/2019 11:45:42 AM

content-length:xxx


<?xml version="1.0"?>

<MYXML>

  <header/>

  <body>

    <data_block>      

    </data_block>

  </body>

</MYXML>



************************************************************************

End API Response: 7/1/2019 10:17:06 AM

Content-Length: 502


<?xml version="1.0"?>

<MYXML>

    <header></header>

    <body>

        <data_block>            

        </data_block>

    </body>

</MYXML>


************************************************************************

API Client Address: 1.1.1.1

Begin API Request: 7/18/2019 11:45:42 AM

content-length:xxx


<?xml version="1.0"?>

<MYXML>

  <header/>

  <body>

    <data_block>      

    </data_block>

  </body>

</MYXML>



************************************************************************

End API Response: 7/1/2019 10:17:06 AM

Content-Length: 502


<?xml version="1.0"?>

<MYXML>

    <header></header>

    <body>

        <data_block>            

        </data_block>

    </body>

</MYXML>


************************************************************************

API Client Address: 1.1.1.1

Begin API Request: 7/18/2019 11:45:42 AM

content-length:xxx


<?xml version="1.0"?>

<MYXML>

  <header/>

  <body>

    <data_block>      

    </data_block>

  </body>

</MYXML>



************************************************************************

End API Response: 7/1/2019 10:17:06 AM

Content-Length: 502


<?xml version="1.0"?>

<MYXML>

    <header></header>

    <body>

        <data_block>            

        </data_block>

    </body>

</MYXML>

`


我需要提取每组请求/响应,以便我可以解析每组测试响应以查看是否发生错误。


翻过高山走不出你
浏览 118回答 2
2回答

牛魔王的故事

你不需要正则表达式来做到这一点。您可以使用 strtok() (&nbsp;https://www.php.net/manual/en/function.strtok.php&nbsp;)等基本字符串操作将响应标记为数组。然后您可以解析每个响应的 XML。您可以使用的另一个字符串操作是:explode()&nbsp;https://www.php.net/manual/en/function.explode.php哦,我假设您不想花时间编写 XML 解析器。谷歌有关在 PHP 中解析 XML 的信息或库。重新发明轮子是没有意义的。

慕尼黑的夜晚无繁华

从您的文件中,您可以使用以下表达式提取 xml 部分:^<\?xml version="1.0"\?>(?:\r?\n(?!</MYXML>).*)*\r?\n</MYXML>$正则表达式演示| php 演示从匹配中您可以提取这些部分并使用simplexml_load_file或使用DOMDocument和例如DOMXPath来获取您的值。例如:$str = "...";$re = '~^<\?xml version="1.0"\?>(?:\r?\n(?!</MYXML>).*)*\r?\n</MYXML>$~m';preg_match_all($re, $str, $matches);foreach ($matches[0] as $match) {&nbsp; &nbsp; $dom = new DOMDocument();&nbsp; &nbsp; $dom->loadXML($match);&nbsp; &nbsp; $xpath = new DOMXPath($dom);&nbsp; &nbsp; $val = $xpath->query("/MYXML/body/data_block")->item(0)->nodeValue;&nbsp; &nbsp; echo $val . PHP_EOL;}
打开App,查看更多内容
随时随地看视频慕课网APP