1
thinkmore 2016-04-25 09:49:26 +08:00
能给出具体要求吗?比如说运行环境。原始文本。期望结果等。
比如: js 原始文本: http://www.baidu.com/show.html 期望文本: www.baidu.com/show.html (不获取协议头) |
2
ango 2016-04-25 10:35:16 +08:00
前端外部资源,无非就这两类: href 、 src 。(周一脑子就像浆糊,是否还有其它实在想不起了)。
以这些标识开头,以指定 CDN 资源类型结尾, replace 一下就好了。 |
3
ango 2016-04-25 11:17:26 +08:00
@ango
$cdnUrl = 'http://www.zishuo.net/'; $exts = 'jpg|jpeg|gif|png|bmp|webp|css|js'; $pattern = "/((?:src|href)=[\"\']?)((?:http|https)?\/\/[^\/]+\/)(.+?\.(?:{$exts}))/"; //preg_match_all($pattern, $html, $matches); $html = preg_replace($pattern, "\\1{$cdnUrl}\\3", $html); 另外,简单点可以用 preg_replace_callback 来处理的,简单正则找到要替换要位置后,用 callback 来判断一下是否需要处理。 |
4
jackal 2016-04-25 12:40:18 +08:00
我还算熟悉正则表达式。
但是对 PHP 不熟悉,对你的业务(想替换的文件是哪一些)也不熟悉。 我猜你想要的是找人帮你修改一下正则表达式,能更好地匹配。 麻烦你把规则说清楚,给一些例子,哪一些是匹配的,哪一些不需要匹配。 然后我们把修改好的正则表达式贴给你。 |
5
ZiShuo OP @thinkmore
@ango @jackal 是 PHP 的,举个例子吧? 我原本网页里面的图片地址是以下这种路径: xxx/logo.jpg /xxx/logo.jpg ./xxx/logo.jpg 现在我想将网页里面所有这种路径的都替换成下面这种 url : http://www.zishuo.net/xxx/logo.jpg |
6
ZiShuo OP 简单来说就是将
|
7
ZiShuo OP 简单来说就是将
<img alt="" src="index/a14.jpg" width="320" height="207" /> 替换成 <img alt="" src="http://www.zishuo.net/index/a14.jpg" width="320" height="207" /> 但是不仅仅限于图片,整个替换资源的类型为: jpg|jpeg|gif|png|bmp|webp|css|js |
8
imn1 2016-04-25 14:44:05 +08:00
感觉在 http sever 做 redir 跳转更简单些
./ 这种是相对路径,确定直接换成 CDN 的根? |
9
ZiShuo OP |
10
imn1 2016-04-25 16:16:32 +08:00
^(?!http|//).*jpg$
中间.*部分自己举一反三吧 |
11
cxbig 2016-04-25 16:24:50 +08:00
这种需求不应该 PHP 来做吧?在 Nginx 或 Apache 里写规则快多了。
|
12
thinkmore 2016-04-26 10:27:26 +08:00
((\.)?(/)?\w+/\w\.(jpg|jpeg|gif|png|bmp|webp|css|js))这个正则可以匹配你的资源。然后你替换下就行了.
不满足的稍微调试下就行了 |
14
jackal 2016-04-26 17:12:58 +08:00
我跟你 @ZiShuo 讲,需求要这样表达才算清楚明了, 请你确认一下,然后朋友们帮你出正则表达式和替换了。
1 )资源一定是被“” ‘’(双引号,单引号)来包围括起来的 2 )资源结尾是 .(jpg|jpeg|gif|png|bmp|webp|css|js) ()括起来是限定“或者“的范围 3 )文件名肯定是 x/y.jpg 等 , x,y 可以是 1 个或者多个字符, x 表示目录名, x 可能是为空(没有目录,直接 y.jpg )或者多重目录(x/y/z.jpg 这样的) 字符的话, 是大小写字母和数字和-_(横杠和下划线)字符 4 )资源的协议,有可能是无协议,比如只是 src="index/a14.jpg"; 但是也有可能是 http://www.abc.com/index/a14.jpg (请你考虑好这种情况的可能性,没有的话最好) |
15
thinkmore 2016-04-27 09:54:34 +08:00
@ZiShuo 我不会写 php 的。我给你写了一个 js 版本的。你根据你的语法进行具体转换下吧
result = http://www.baidu.com/abc/test.do.replace(/\.?\/?(\w+\/\w+\.(jpg|jpeg|gif|png|bmp|webp|css|js))/mg, "http://www.zishuo.net/$1"); 将 http://www.baidu.com/abc/test.do 换成你的匹配串就行了 |