繁体   English   中英

PHP Regex缺少两个匹配项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM