我正在尝试找到一个文本块,并用修改后的文本块替换它,由于某种原因它无法正常工作。我可以在我的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);
答案 0 :(得分:2)
问题很可能是行结尾(即你的机器vs * nix)。
您的编辑器应该有一个使用特定行结尾保存文件的选项。我建议将它与你的生产环境相同(即* nix)
答案 1 :(得分:0)
尝试将“\ n”替换为搜索字符串中的换行符。请确保使用双引号,因为单引号不会解释特殊字符的某些转义序列。
来源:
答案 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';
该模式中的任何点(句点)字符都将匹配任何内容,包括新行。默认情况下,它不包含新行。