0

簡単な質問ですが、XML要求または応答が与えられることを考えると、これらの2行は常に同じ結果をもたらしますか?

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

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

いいえの場合、どうすればそのようなものを作ることができpreg_replaceますか?

前もって感謝します。

4

3 に答える 3

4

は(山括弧の外側の空白にのみ一致します)preg_replaceよりも制約があり、スペース文字が含まれています。さらに、のような文字列は置き換えられず、代わりに空白が保持されます。str_replace\s<blah> \r \n \t TEXT \t\t</blah>

実際、この2つは、どちらも何らかの形で空白に影響を与えることを除けば、まったく同じではありません。

あなたに相当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は通常、1行で機能するため、後でまだ改行がある可能性があります=>それを回避するには、「m」修飾子を使用します

最初のバリアントが正常に機能する場合、私の意見では、正規表現よりも優れています。それ以外の場合、これは検索されたものである可能性があります。

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