【问题标题】:Rewrite regex without negation不加否定地重写正则表达式
【发布时间】:2015-10-28 05:59:13
【问题描述】:

我写了这个正则表达式来帮助我从一些文本文件中提取一些链接:

https?:\/\/(?:.(?!https?:\/\/))+$

因为我使用的是golang/regexp lib,所以我无法使用它,因为我的否定(?!..

我想用它做的是选择从最后一次出现 http/https 到最后的所有文本。

sometextsometexhttp://websites.com/path/subpath/#query1sometexthttp://websites.com/path/subpath/#query2

=> 输出:http://websites.com/path/subpath/#query2

谁能帮我解决一下,我花了几个小时尝试不同的方法来重现相同的结果,但没有成功。

【问题讨论】:

    标签: regex go regex-negation


    【解决方案1】:

    试试这个正则表达式:

    https?:[^:]*$
    

    Regex live here.

    【讨论】:

    • 谢谢,您知道如何修改该正则表达式以便获得相同的选择,但直到找到 &type=,或者如果 &type= 不存在,则直到最后?
    • 如果 URL 包含 : http://websites.com/path/subpath/?q=tsid:51,则正则表达式将不起作用
    • @alexsmn。对不起,不使用否定,这是我能做到的。也许一些高级用户可以帮助解决这些问题。
    【解决方案2】:

    存在前瞻是有原因的。

    但是,如果您坚持假定等效的替代方案,您可以使用的一般策略是:

    (?!xyz)
    

    有点等价于:

    $|[^x]|x(?:[^y]|$)|xy(?:[^z]|$)
    

    话虽如此,但愿我没有犯任何错误:

    https?:\/\/(?:$|(?:[^h]|$)|(?:h(?:[^t]|$))|(?:ht(?:[^t]|$))|(?:htt(?:[^p]|$))|(?:http(?:[^s:]|$))|(?:https?(?:[^:]|$))|(?:https?:(?:[^\/]|$))|(?:https?:\/(?:[^\/]|$)))*$
    

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 1970-01-01
      • 2015-10-28
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多