URL替换正则表达式

时间:2010-03-14 15:55:25

标签: php regex

我正在尝试制作一个网址,为字符串中的所有/hrefs添加srcs。 它应该只向{0}开头没有/并且还没有http://的网址添加/

如果我们有这个:

<a href="ABC">...
<img src="DEFG">...
<a href="/HIJ">...
<a href="http://KLMN">...

结果应该是这样的:

<a href="/ABC">...
<img src="/DEFG">...
<a href="/HIJ">...
<a href="http://KLMN">...

这是我到现在为止所做的:

&(href|src)="?!(\/|http::\/\/)(.+)"

替换将是

$1="/$2"
但是,它不起作用。

  • 我做错了什么?
  • 工作正则表达式如何看起来像

3 个答案:

答案 0 :(得分:1)

仅使用base element更改基本URI就足够了:

<base href="/">

现在,基本URI路径为/,而不是当前文档URI的路径。但请注意,这会影响所有相对URI,而不仅仅是那些具有相对URI路径的URI。

答案 1 :(得分:0)

$str = preg_replace('/(href|src)="([^\/][^:]*)"/', '\1="/\2"', $str)

这将按照您的要求执行,但有一点例外,即包含冒号(:)的任何字符串都不会添加“/”。这使它可以轻松处理http://,ftp://等,但也不适用于像“abcd:efgh”这样的东西。

答案 2 :(得分:0)

这会将标记与hrefsrc匹配,第一组包含地址。

(<[^<]*?(?:href|src)=")(?!http|/)(.+?)("[^<]*?>)

并替换为:

$1/$2$3