正则替换 http 为 https,中间部分如何匹配但不存储?

2019-04-08 10:31:49 +08:00
 Flands

有字符串
fasuehttp://www.google.comfasdfhttp://www.baidu.comfasdhttp://sougou.comsfdhttp://www.zhihu.com
要求:
只将结尾为google | sougouhttp改为https

我给的正则无效
http:(?:(.{0,8}))(?=(?:(google|sougou)))
如果只存在http://www.xxxxx的话很好匹配,但是不确定www是否存在,并且不存储就不行。
有没有通用匹配的写法,不要写成www?这种固定的
试了很多遍都不行,怎么写这段正则啊?

2232 次点击
所在节点    程序员
5 条回复
xiangyuecn
2019-04-08 11:00:00 +08:00
参考我早上发的 /t/552813,前瞻匹配部分和我以前写法一样,是不会有效果的。另外记录一下:刚才发了一篇吐槽 github 的被水深火热了。。现在被关小黑屋中
geelaw
2019-04-08 11:04:44 +08:00
http:(?=([A-Za-z0-9_-]+\.)*(google|sougou)\.)

用一个 positive lookahead 即可上面这个表达式不能处理 http COLON SLASH SLASH google DOT phishing DOT com 的情况,另外搜索引擎搜狗的域名其实是 sogou。
1OF7G
2019-04-08 11:06:13 +08:00
http(?=:\/\/(www\.)?(google|sougou))

例子: https://regex101.com/r/Am45LD/1
蓝色是匹配的内容,只会匹配到 http。其它颜色是分组捕获,可以不用管,或者改成非捕获分组。
geelaw
2019-04-08 11:09:33 +08:00
@geelaw #2 忘记 // 了(
ryd994
2019-04-08 17:35:35 +08:00
用 named capture,这可靠的多。将来要增加 capture 也可以很方便地加。
不要用数字序号。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/552860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX