0

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

我尝试了类似的东西

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

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

4

3 回答 3

3

(?!png)$一般来说,类似的东西毫无意义;它的意思是“一个跟在后面的位置png,并且在字符串末尾”,但是当然字符串的结尾永远不会跟在后面png,所以(?!png)$相当于 just $。(你明白我的意思吗?)

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

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

where(?<!...)表示“前面没有”的位置...。(请参阅Javadoc 了解java.util.regex.Pattern.)

于 2013-04-25T06:06:13.300 回答
2

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

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

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

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

于 2013-04-25T06:08:26.723 回答
1

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

^(http://www\.google\.com/|http://www\.facebook\.com/)(?!.*?\.(?:jpe?g|png|bmp|gif)$).*$
于 2013-04-25T06:06:04.420 回答