V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Flands
V2EX  ›  程序员

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

  •  
  •   Flands · 2019-04-08 10:31:49 +08:00 · 2194 次点击
    这是一个创建于 1842 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有字符串
    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?这种固定的
    试了很多遍都不行,怎么写这段正则啊?

    5 条回复    2019-04-08 17:35:35 +08:00
    xiangyuecn
        1
    xiangyuecn  
       2019-04-08 11:00:00 +08:00
    参考我早上发的 /t/552813,前瞻匹配部分和我以前写法一样,是不会有效果的。另外记录一下:刚才发了一篇吐槽 github 的被水深火热了。。现在被关小黑屋中
    geelaw
        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。
    1OF7G
        3
    1OF7G  
       2019-04-08 11:06:13 +08:00
    http(?=:\/\/(www\.)?(google|sougou))

    例子: https://regex101.com/r/Am45LD/1
    蓝色是匹配的内容,只会匹配到 http。其它颜色是分组捕获,可以不用管,或者改成非捕获分组。
    geelaw
        4
    geelaw  
       2019-04-08 11:09:33 +08:00 via iPhone
    @geelaw #2 忘记 // 了(
    ryd994
        5
    ryd994  
       2019-04-08 17:35:35 +08:00
    用 named capture,这可靠的多。将来要增加 capture 也可以很方便地加。
    不要用数字序号。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1033 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:41 · PVG 03:41 · LAX 12:41 · JFK 15:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.