有字符串
fasuehttp://www.google.comfasdfhttp://www.baidu.comfasdhttp://sougou.comsfdhttp://www.zhihu.com
要求:
只将结尾为google | sougou
的http
改为https
我给的正则无效
http:(?:(.{0,8}))(?=(?:(google|sougou)))
如果只存在http://www.xxxxx
的话很好匹配,但是不确定www
是否存在,并且不存储就不行。
有没有通用匹配的写法,不要写成www?
这种固定的
试了很多遍都不行,怎么写这段正则啊?
1
xiangyuecn 2019-04-08 11:00:00 +08:00
参考我早上发的 /t/552813,前瞻匹配部分和我以前写法一样,是不会有效果的。另外记录一下:刚才发了一篇吐槽 github 的被水深火热了。。现在被关小黑屋中
|
2
geelaw 2019-04-08 11:04:44 +08:00 via iPhone
http:(?=([A-Za-z0-9_-]+\.)*(google|sougou)\.)
用一个 positive lookahead 即可上面这个表达式不能处理 http COLON SLASH SLASH google DOT phishing DOT com 的情况,另外搜索引擎搜狗的域名其实是 sogou。 |
3
1OF7G 2019-04-08 11:06:13 +08:00
http(?=:\/\/(www\.)?(google|sougou))
例子: https://regex101.com/r/Am45LD/1 蓝色是匹配的内容,只会匹配到 http。其它颜色是分组捕获,可以不用管,或者改成非捕获分组。 |
5
ryd994 2019-04-08 17:35:35 +08:00
用 named capture,这可靠的多。将来要增加 capture 也可以很方便地加。
不要用数字序号。 |