PHP preg_replace HREF

PHP preg_replace HREF,php,regex,preg-replace,Php,Regex,Preg Replace,简言之,我正在利用pre_replace查找样式表,并基本上为我的网站上的浏览者代理这种体验,我使用外部域并prepend将其添加到当前的href。样式表是这样开始的 <link rel="stylesheet" type="text/css" href="/assets/css/base.css"> 我的问题是,当我遇到一个不包含HTTP/HTTPS的站点时 <link rel="stylesheet" type="text/css" href="//cdn.website

简言之,我正在利用
pre_replace
查找样式表,并基本上为我的网站上的浏览者代理这种体验,我使用外部域并
prepend
将其添加到当前的
href
。样式表是这样开始的

<link rel="stylesheet" type="text/css" href="/assets/css/base.css">
我的问题是,当我遇到一个不包含HTTP/HTTPS的站点时

<link rel="stylesheet" type="text/css" href="//cdn.website.com/assets/css/base.css">
[^(href)]
不是否定。它仍然是一个角色类

您正在寻找一个:


虽然我对为每个琐事启动DOM遍历的所谓模因和过度泛化表示异议,但应该注意的是,正则表达式通常只适用于规范化和众所周知的HTML输入;如果您的任务是代理任意网站,则不需要。regex中有
if/then/else
条件,但这并不是必须的:

(?!(href|src)=)(\")\/(\\w+.+)(\">)
代码:

输出:

<link rel="stylesheet" type="text/css" href="http://website.com/assets/css/base.css">

例如:


简单:不要使用正则表达式。使用DOM解析器,在获得
href
属性的内容后,它就是一个简单的字符串替换操作。欢迎使用StackOverflow。虽然此代码可能会回答该问题,但提供有关此代码为什么和/或如何回答该问题的附加上下文可提高其长期价值。考虑编辑你的答案来添加上下文。这个线程中的一些注释涉及正则表达式。我最近在为动态CMS编写插件时遇到了一个“change hrefs”问题,因此我可以选择输出staticHTML。我尝试过让preg_replace和正则表达式工作,但失败了。上面的代码简洁明了。这对我有用。我没有编写上面的mungeHref($href)函数,因为我的需求与您的不同。无论如何,这是最简单的部分。fwiw我使用了几乎相同的代码来修改动态HTML页面中所有图像的“src”属性,因此可以将其写成静态HTML。但这是另一个话题。
$html = file_get_contents($website_url);
$domain = 'website.com';
$html = preg_replace("/(href|src)\=\"([^(http)])(\/)?/", "$1=\"$domain$2", $html);
echo $html;
 ~  (href|src) =\" (?!href:)  \/?  ~x
(?!(href|src)=)(\")\/(\\w+.+)(\">)
$html = file_get_contents($website_url);
$domain = 'http://website.com';
$result = preg_replace("/(?!(href|src)=)(\")\/(\\w+.+)(\">)/u", "$2$domain/$3$4", $html);
echo $result;
<link rel="stylesheet" type="text/css" href="http://website.com/assets/css/base.css">
function alterLinks($html) {

  $ret = '';

  $dom = new DomDocument();
  $dom->loadHTML($html);
  $links = $dom->getElementsByTagName('a');

  foreach ($links as $alink) {
    $href = $alink->getAttribute('href'); 
    $aMungedLink = $this->mungeHref($href);
    $alink->setAttribute("href",$aMungedLink);
  }

  $ret = $dom->saveHTML();
  return $ret;
}