【问题标题】:Non-greedy regex match when searching from end从末尾搜索时的非贪婪正则表达式匹配
【发布时间】:2013-08-11 22:35:54
【问题描述】:

我读到你应该使用? 非贪婪地匹配文本,所以正则表达式

http://.*?\.png

...用于

http://example.png.png

...将返回 http://example.png

但不贪婪似乎只从左到右起作用。也就是说,如果我匹配它

http://http://example.png

...它会返回http://http://example.png

我怎样才能让代码只匹配http://example.png

【问题讨论】:

    标签: objective-c regex nsregularexpression


    【解决方案1】:

    试试这个:

    http://[A-Za-z0-9_-]+\.png
    

    它不会得到第一个http://,因为它和.png之间的[A-Za-z0-9_-]+

    如果您担心 URL 中的其他字符,也可以使用它:

    http://[^:]+?\.png
    

    【讨论】:

    • 谢谢!是否所有 URL 都只包含 A-Z、a-z、0-9、-、_ 和 %?
    • 老实说,我什至从未见过带有% 的网址。您可以用[^:]+? 替换[A-Za-z0-9_-] 部分,如果您担心的话,它可能适用于您的任何情况。
    • 哦,我刚刚意识到带有端口号的 URL 存在问题。像 google.com:80 这是一个有效的网址,但我认为这个正则表达式不匹配。
    • 确实如此,如果这是一个问题,我想负面展望会更好。我有点好奇这是什么用例。
    【解决方案2】:

    你也可以用否定的眼光,但我认为 smerny 的答案更好。

    http://(?!http://).*?\.png
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多