0

只是一个简短的问题,考虑到给出了 XML 请求或响应,这两行是否总是给出相同的结果?

str_replace( array( "\n", "\t", "\r", "\r\n" ), '', trim( $xml ) );

preg_replace( '#>\s+<#', '><', $xml );

如果没有,我怎样才能做到preg_replace这样?

先感谢您。

4

3 回答 3

4

preg_replacestr_replace(它只匹配尖括号外的空格)更受限制,并且包括\s空格字符。<blah> \r \n \t TEXT \t\t</blah>此外,不会替换字符串 like ,而是保留空格。

事实上,除了都以某种方式影响空白之外,两者并没有什么相似之处。

相当于preg_replace你的str_replace就是('/[\r\n\t]/','',$xml)

于 2012-09-21T14:32:57.670 回答
2

不。例如,如果您有类似的东西:

<tag att="1"
att="2"
att="3">text</tag>

他们会给出不同的结果。但是,如果我可以提供建议,请不要为此目的使用正则表达式。

于 2012-09-21T14:33:14.080 回答
0

它们不相似,因为:

  1. 正则表达式只处理括号之间的空格(我想这是因为你不想破坏 xml?!)
  2. \s 还将删除“正常”空白字符和其他不可打印字符(我认为可以吗?)
  3. preg_replace 通常只在单行上工作,因此之后可能还有换行符 => 为避免这种情况,请使用“m”修饰符

如果第一个变体适合您,那么我认为它比正则表达式更好。否则,这可能是搜索到的:

preg_replace( '#>\s+<#m', '><', $xml );
于 2012-09-21T14:46:27.987 回答