PHP正则表达式 - 如果链接包含特定字符串,则查找并替换链接标题

时间:2015-07-23 06:26:39

标签: php regex replace html-parsing

我正在尝试进行此正则表达式匹配并替换,但我无法做到。

实施例

<?xml version="1.0" encoding="utf-8"?>
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/window_background2">
    <item>
        <shape>
            <solid android:color="#FFFFFF" />
        </shape>
    </item>
</ripple>

我想找到每个标签的集合并替换为这样的

查找包含&#34; / file&#34;的每个链接href中的字符串

<a href="../files/...">One</a>
<a href"../files/...">Two</a>
<a href="three">Three</a>
<a href="four">Four</a>

并将其名称替换为

<a href="../files/...">One</a>

与标签的其余部分相同。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

(<a href(?=[^>]*\/file)[^<]*)(<\/a>)会找到您感兴趣的链接。请在此处进行测试:https://regex101.com/r/tG4fT1/1。如果您想要的替代品是静态的,您可以使用正则表达式并单独使用preg_replace

$re = "/(<a href(?=[^>]*\\/file)[^<]*)(<\\/a>)/"; 
$subst = "$1 (Filetype Filesize)$2"; 

$result = preg_replace($re, $subst, $str);

现在,假设您实际上想要添加字符串(Filetype Filesize),而不是FiletypeFilesize的实际值,而这正是您的问题所要解决的问题。如果它是值,则会变得更复杂,并且根据this answer,您可能必须使用匿名函数,同时还为每个值指定正确的匹配。