【问题标题】:Regex for matching a string starting with a pattern and not ending with a pattern用于匹配以模式开头且不以模式结尾的字符串的正则表达式
【发布时间】:2013-04-25 06:00:32
【问题描述】:

给定一个网址,我必须匹配该网址以特定域开头而不以特定模式结尾。
例如,
给定一个 url 列表,我想匹配一个以 "http://www.google.com/""http://www.facebook.com/" 开头而不以 ".jpg"".bmp"".png" 结尾的 url

我尝试了类似的东西

^(http://www\.google\.com/|http://www\.facebook\.com/).*(\.(?!png)|(?!bmp)|(?!jpg))$

但它似乎不起作用.. 有什么错误吗?或者任何替代方式?

【问题讨论】:

  • 但不能保证其余链接不会指向图片。

标签: java regex negative-lookahead


【解决方案1】:

(?!png)$ 这样的东西一般来说是毫无意义的;它的意思是“not 后跟png 的位置,并且 is 在字符串的末尾”,但当然永远不会跟在字符串的末尾无论如何,png,所以(?!png)$ 等同于$。 (明白我的意思吗?)

幸运的是,Java 正则表达式支持零宽度 lookbehind 断言,因此您可以编写:

^http://www\.(google|facebook)\.com.*(?<!\.(png|bmp|jpg))$

其中(?&lt;!...) 表示“... 之前之前的位置”。 (见the Javadoc for java.util.regex.Pattern。)

【讨论】:

  • 仅供参考,我正在使用 java 正则表达式
【解决方案2】:

这个正则表达式应该可以工作:

^https?:\/\/(?:www\.)?(?:google|facebook)\.com\/(?!.*?\.(?:jpe?g|png|bmp|gif)$).*$

现场演示:http://www.rubular.com/r/V0X6ve1iUT

Java 演示:http://ideone.com/TlCyTG

【讨论】:

  • @Civa: png 文件上的查询参数 :)
  • 我只是展示一个例子,如果你想要确切的失败例子,有可能失败,请看这个-->“http://www.png.com”。有问题的陈述“..not以某种模式结尾......”所以我说你使用$而不是\ b。 :)
【解决方案3】:

试试这是你想要的确切要求

^(http://www\.google\.com/|http://www\.facebook\.com/)(?!.*?\.(?:jpe?g|png|bmp|gif)$).*$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2016-12-07
    • 2011-09-23
    • 2014-07-17
    相关资源
    最近更新 更多