我几乎把我的正则表达式用于浏览html页面,但是在我继续操作之前遇到了两个问题,我试图让它们被压扁,我需要能够匹配空和斜线(以及空的结束报价)但是我已经筋疲力尽地看到了我正在做的事情,有人能帮我最后一点吗?
$pathspec='in-front';
$subjects = array(
'<base href="http://foo.com/images/" target="_blank">', # no changes (correct)
'<base href="/" target="_blank">', # '/in-front/' (fails)
'<a href="https://foo.com/images/">Foo</a>', # no changes (correct)
'<a href="">Foo</a>', # '/in-front/' (fails)
'<img src="bar/foo.png" />', # no changes (correct)
'<img src="/bar/foo.png" />', # '/in-front/bar/foo.png' (correct)
);
foreach ($subjects AS $subject)
echo preg_replace( '/(href|src)=["\']?\/(?!\/)([^"\'>]+)["\']?/', "$1='/$pathspec/$2'", $subject ) . "\n";
die;
预期输出位于评论部分,谢谢。
答案 0 :(得分:2)
看看这是否适合你
preg_replace('#(href|src)=["\'](?:/|/(?!\/)(\S+?)|)["\']#',"$1='/$pathspec/$2'",$subject)
答案 1 :(得分:1)
您可以使用此模式:
$pattern = '~\b(?:href|src)\s*=\s*(["\']?+)\K(?:/|(?=[\s>]|\1))~i';
$replacement = "/$pathspec/";
$result = preg_replace($pattern, $replacement, $subject);