【问题标题】:preg_replace not behaving as expected?preg_replace 没有按预期运行?
【发布时间】:2015-05-26 09:39:44
【问题描述】:

Sup 偷看。我这里有个问题。我收到了这些数据,只想将<SOAP-ENV 元素与它们各自的结束元素一起剥离。

这是标题和正文的开始部分。

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <SOAP-ENV:Header></SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <VisionDataExchange>

现在我在 $xml 包含整个 xml 数据的变量上运行我的常规表达式:

$xml = preg_replace("/<\\/?SOAP(.|\\s)*?>/",'',$xml);

现在我的结果是这样的。它实际上剥离了开始标签但没有结束标签?我在这里错过了什么?

<?xml version="1.0" encoding="UTF-8"?>

  </SOAP-ENV:Header>

    <VisionDataExchange>

【问题讨论】:

  • 为什么不在远程服务器上使用 SOAP?检查SoapClient
  • 事情是这样的。我根本不想提取信息。我只想删除肥皂元素。就是这样
  • @AvinashRaj 很奇怪。似乎在测试器中工作但在运行时不正确?

标签: php regex xml-parsing preg-replace


【解决方案1】:

我建议只匹配标签内的所有内容,而不是 any character or whitespace。看看this regex

$re = "/<\\/?SOAP[^<>]+?>/"; 
$str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\">\n  <SOAP-ENV:Header></SOAP-ENV:Header>\n  <SOAP-ENV:Body>\n    <VisionDataExchange>"; 
$subst = ""; 

$result = preg_replace($re, $subst, $str);

【讨论】:

  • 谢谢,有道理,但对我来说仍然产生相同的结果。 -_-
【解决方案2】:

好的,所以在我的桌子上差点摔断头骨后,我发现了问题所在。正则表达式确实运行良好!字符串中有一个隐藏的\,导致正则表达式失败。

【讨论】:

  • 你用的词太棒了。 “在我的桌子上打碎我的头骨”和“Sup peeps”。可能是我在 StackOverflow 上见过的最好的入口和出口。 Kudos
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多