这个str_replace和这个preg_replace是一样的吗?

时间:2012-09-21 14:30:10

标签: php regex str-replace

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

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

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

如果不是,我该如何制作preg_replace

提前谢谢。

3 个答案:

答案 0 :(得分:4)

preg_replacestr_replace更受约束(它只匹配尖括号外的空格),\s包含空格字符。此外,不会替换像<blah> \r \n \t TEXT \t\t</blah>这样的字符串,而是保留空格。

事实上,这两者在某些方面都不会影响空白。

preg_replace的等效str_replace只是('/[\r\n\t]/','',$xml)

答案 1 :(得分:2)

没有。例如,如果你有类似的东西:

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

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

答案 2 :(得分:0)

它们不相似,因为:

  1. 正则表达式只处理括号之间的空格(我想这是想要的,因为你不想销毁xml?!)
  2. \ s也会删除“普通”空白字符和其他non-printable characters(我认为没问题?)
  3. preg_replace通常适用于单行,因此您之后可能仍然有换行符 =&GT;为避免这种情况,请使用"m" modifier
  4. 如果第一个变体适合你,那么在我看来它比正则表达式更好。否则,这可能是搜索到的:

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