[英]PHP Regex missing two matches
我几乎可以忽略正则表达式来浏览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;
预期的输出在注释部分,谢谢。
看看这是否适合您
preg_replace('#(href|src)=["\'](?:/|/(?!\/)(\S+?)|)["\']#',"$1='/$pathspec/$2'",$subject)
您可以使用以下模式:
$pattern = '~\b(?:href|src)\s*=\s*(["\']?+)\K(?:/|(?=[\s>]|\1))~i';
$replacement = "/$pathspec/";
$result = preg_replace($pattern, $replacement, $subject);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.