php - 找不到/替换多行字符串

时间:2011-07-15 16:31:15

标签: php

我正在尝试找到一个文本块,并用修改后的文本块替换它,由于某种原因它无法正常工作。我可以在我的phpDesigner编辑器中执行以下行,它运行正常,但是当我尝试在我的linux webserver上执行相同的命令时,它不起作用。

有人可以通过正则表达式或其他方法帮助我解决问题吗?

    $tmp_code = str_replace('<!--
    {if="$membership.field_files"}
    <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Files</span></a></li>
    {else}
    <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Files</span></a></li>
    {/if}
    -->','{if="$membership.field_files"}
    <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Add/Remove Offers, Products and Files</span></a></li>
    {else}
    <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Add/Remove Offers, Products and Files</span></a></li>
    {/if}',$tmp_code);

4 个答案:

答案 0 :(得分:2)

问题很可能是行结尾(即你的机器vs * nix)。

您的编辑器应该有一个使用特定行结尾保存文件的选项。我建议将它与你的生产环境相同(即* nix)

答案 1 :(得分:0)

尝试将“\ n”替换为搜索字符串中的换行符。请确保使用双引号,因为单引号不会解释特殊字符的某些转义序列。

来源:

http://php.net/manual/en/language.types.string.php

http://php.net/manual/en/function.str-replace.php

答案 2 :(得分:0)

它可能与空白区域(新线条和标签)有关。你可以:

$tmp_code = preg_replace('<!--\s*{if="$membership.field_files"}\s*<li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Files</span></a></li>\s*{else}\s* <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Files</span></a></li>\s*{/if}\s*-->','{if="$membership.field_files"}
    <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Add/Remove Offers, Products and Files</span></a></li>
    {else}
    <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Add/Remove Offers, Products and Files</span></a></li>
    {/if}',$tmp_code);

使用\ s *搜索行之间的任意数量的空格,而不是您键入的确切数量。

答案 3 :(得分:0)

我已经能够通过使用模式字符串中的“PCRE_DOTALL”为s设置内部选项设置来解决此问题。

示例:

$pattern = '# ...pattern goes here... #s';

该模式中的任何点(句点)字符都将匹配任何内容,包括新行。默认情况下,它不包含新行。

参考:PCRE Pattern Modifiers