是否可以使用php在字符串中搜索文件路径模式,然后在指定的位置插入新文件夹?
<?php
$string = '<ul>
<li><a href="/folder1/folder-a/file-a.htm">Link Text a</a></li>
<li><a href="/folder1/folder-b/file-b.htm">Link Text b</a></li>
<li><a href="/folder1/folder-c/file-c.htm">Link Text c</a></li>
<li><a href="/folder1/folder-d/file-d.htm">Link Text d</a></li>
</ul>';
?>
我事先不知道将调用哪些文件夹-a,b,c,d或文件-a,b,c,d,所以我看不出如何使用str_replace。我希望在每种情况下在文件之前插入一个新文件夹,以便结果看起来像这样(新文件夹在每种情况下都具有相同的名称):
<?php
$string = '<ul>
<li><a href="/folder1/folder-a/new-folder/file-a.htm">Link Text a</a></li>
<li><a href="/folder1/folder-b/new-folder/file-b.htm">Link Text b</a></li>
<li><a href="/folder1/folder-c/new-folder/file-c.htm">Link Text c</a></li>
<li><a href="/folder1/folder-d/new-folder/file-d.htm">Link Text d</a></li>
</ul>';
?>
提前感谢您的任何反馈。
答案 0 :(得分:2)
假设您的HTML总是格式良好,这可能适合您:
$string = '<ul>
<li><a href="/folder1/folder-a/file-a.htm">Link Text a</a></li>
<li><a href="/folder1/folder-b/file-b.htm">Link Text b</a></li>
<li><a href="/folder1/folder-c/file-c.htm">Link Text c</a></li>
<li><a href="/folder1/folder-d/file-d.htm">Link Text d</a></li>
</ul>';
$newString = preg_replace_callback(
'/href="(.*?)"/i',
function($matches) {
return 'href="'.dirname($matches[1]).'/new-folder/'.basename($matches[1]).'"';
},
$string
);
echo $newString;
正如这里的许多人都会强调告诉你的那样,用正则表达式解析HTML并不是一个好主意,除非你知道它的形成良好。