给定一个网址,我必须匹配网址从某个域开始而不是以某种模式结束
例如,
给定一个网址列表,我想匹配以"http://www.google.com/"
或"http://www.facebook.com/"
开头的网址,而不是以".jpg"
和".bmp"
以及".png"
我试过像
这样的东西^(http://www\.google\.com/|http://www\.facebook\.com/).*(\.(?!png)|(?!bmp)|(?!jpg))$
但它似乎没有用..有任何错误吗?或者任何其他方式?
答案 0 :(得分:3)
像(?!png)$
这样的东西,一般来说都是毫无意义的;它表示“不后跟png
的位置, 位于字符串末尾”,但当然字符串的结尾是最后从未跟png
,因此(?!png)$
仅相当于$
。 (你明白我的意思吗?)
幸运的是,Java正则表达式支持零宽度 lookbehind 断言,因此您可以编写:
^http://www\.(google|facebook)\.com.*(?<!\.(png|bmp|jpg))$
其中(?<!...)
表示“...
之前之前的位置”。 (见the Javadoc for java.util.regex.Pattern
。)
答案 1 :(得分:2)
这个正则表达式应该有效:
^https?:\/\/(?:www\.)?(?:google|facebook)\.com\/(?!.*?\.(?:jpe?g|png|bmp|gif)$).*$
答案 2 :(得分:1)
尝试这是你想要的确切要求
^(http://www\.google\.com/|http://www\.facebook\.com/)(?!.*?\.(?:jpe?g|png|bmp|gif)$).*$