PHP /正则表达式 - 使用绝对值查找(和替换)相对URL(无论href是否存在)

时间:2015-09-24 14:44:19

标签: php regex

我正在开发一个小型PHP项目,我需要用它的绝对版本替换字符串中找到的每个相对url。问题是,我已经找到了很多这个问题的答案,但是所有这些都要求网址以href作为前缀。 我需要转换的一个简单示例如下:

<link rel="alternate" type="application/atom+xml" title="Feed for question &#39;preg_replace to change url from relative to absolute&#39;" href="/feeds/question/19373024">
        <meta name="twitter:app:country" content="US" />
        <meta name="twitter:app:name:iphone" content="Stack Exchange iOS" />
        <meta name="twitter:app:id:iphone" content="871299723" />
        <meta name="twitter:app:url:iphone" content="se-zaphod://stackoverflow.com/questions/19373024/preg-replace-to-change-url-from-relative-to-absolute" />

并且在这种情况下,它应该显示(转换后)为:

<link rel="alternate" type="application/atom+xml" title="Feed for question &#39;preg_replace to change url from relative to absolute&#39;" href="http://stackoverflow.com/feeds/question/19373024">
        <meta name="twitter:app:country" content="US" />
        <meta name="twitter:app:name:iphone" content="Stack Exchange iOS" />
        <meta name="twitter:app:id:iphone" content="871299723" />
        <meta name="twitter:app:url:iphone" content="se-zaphod://stackoverflow.com/questions/19373024/preg-replace-to-change-url-from-relative-to-absolute" />

1 个答案:

答案 0 :(得分:0)

$pattern = '/\"\/feeds\/question/';
$subject = "href='/feeds/question/19373024'>";
$replacement = "http://stackoverflow.com/feeds/question";
echo preg_replace($pattern, $replacement, $subject);

编辑:您可以在preg_replace中使用$ pattern设置正则表达式模式。 我这样做了:https://regex101.com/r/xB0dY5/1

然后在$ subject中我加载了一个包含“feeds / questions”的字符串。 在$替换字符串,它应该替换正则表达式选择的东西。

你应该使用“(quote)(”/ feeds ...)正则表达式,否则它会选择第二个链接的提要/问题。