Php 正则表达式:匹配URL,包括tilde
我需要在代码中匹配相对URL,并将其替换为绝对URL。在这些相对URL中有一个Php 正则表达式:匹配URL,包括tilde,php,regex,Php,Regex,我需要在代码中匹配相对URL,并将其替换为绝对URL。在这些相对URL中有一个~字符,我似乎无法匹配 $page = preg_replace('/src="(\/)?([\w_\-\/\.\?&=@%#]*)"/i','src="' . $url . '$2"', $page); $page = preg_replace('/href="(\/)?([\w_\-\/\.\?&=@%#]*)"/i','href="' . $url . '$2"', $page); 这将替换我的
~
字符,我似乎无法匹配
$page = preg_replace('/src="(\/)?([\w_\-\/\.\?&=@%#]*)"/i','src="' . $url . '$2"', $page);
$page = preg_replace('/href="(\/)?([\w_\-\/\.\?&=@%#]*)"/i','href="' . $url . '$2"', $page);
这将替换我的URL,但不适用于以下URL:
- /盒式磁带.axd/样式表/fdbdaa59cb97b35f06f65fd41cb60caa3975cc0f/forbrug-rwd(最大宽度 767px)
这是怎么回事?我会使用这个正则表达式:
(?:src="|href=")(?!http)\/?(.+?)"
这将允许您捕获src
或href
属性中的所有URL,这些属性不以http
开头(并且它将考虑是否存在前导斜杠):
/~/
仍然不起作用。它应该用域替换/~/
只有,没有子文件夹
这可能是最简单的,如果我们做了一个额外的更换步骤后
$domain = 'www.domain.dk';
$page = preg_replace("#($domain/)~/#", '$1', $page);
伟大的谢谢但是我得到了一个错误:
警告:preg_replace():未知修饰符“(”
…可能有什么格式错误吗?如果输入是:
,那么输出将是:Ya,我们需要使用(.+?)
而不是(.+)
,抱歉,但它不起作用。replace已经删除了“href”和“src”…并且该值没有“/”和“:”当我添加这个时,它有点工作。$page=preg\u replace('/(?:href=“)(!http)\/?(.+?)“/I”,“href=“.$url.$1.”,$page);
这个/~/
仍然不工作。它应该只用域替换/~/
,而不使用子文件夹。
$domain = 'www.domain.dk';
$page = preg_replace("#($domain/)~/#", '$1', $page);