匹配特定模式的URL

时间:2011-08-31 14:17:27

标签: regex

我正在尝试这样的匹配网址:

something_with_underscore.png
something_with_underscore_mark.png
something_with_underscore_3600.png
something_with_underscore_10x10.png
something_with_underscore_10x10_mark.png
something_with_underscore_10x10_3600_mark.png

使用此正则表达式:

(.+(?!(?:_[0-9]+x[0-9]+)?(?:_[0-9]+)?(?:_mark)?\.(?:jpg|png|gif)))((?:_([0-9]+)x([0-9]+))?(?:_([0-9]+))?(_mark)?)\.(jpg|png|gif)

这基本上是两个部分,第一部分是捕获名称:

(.+(?!(?:_[0-9]+x[0-9]+)?(?:_[0-9]+)?(?:_mark)?\.(?:jpg|png|gif)))

第二部分捕捉“特征”:

((?:_([0-9]+)x([0-9]+))?(?:_([0-9]+))?(_mark)?)\.(jpg|png|gif)

我对拍摄感兴趣:

group 1: something_with_underscore
group 2: (everything after group 1)
group 3: (first integer 10 of 10x10 part)
group 4: (second integer 10 of 10x10 part)
group 5: (the integer 3600 or whatever it is - if is there)
group 6: _mark (if is there)
group 7: (png, jpg, gif)

我正在使用负向前瞻,其模式看起来像匹配组,以获取文件的名称。我这样做是为了在URL的名称部分允许_。然而,这失败了。 (如果你能看到实现这个目标的另一种方式,请告诉我们。)

我认为这与_和。有关。但我似乎无法弄清楚如何。

例如,如果从表达式中删除第一个_,则最后三个测试用例将正确匹配。

2 个答案:

答案 0 :(得分:0)

这是你在找什么?它匹配您的所有示例。

([^\.]+)(([0-9]+x[0-9]+)?)((_3600)?)((_mark)?)(\.(jpg|png|gif))

答案 1 :(得分:0)

怎么样:

(.+?)(_?([0-9]+)?x?([0-9]+)?_?([0-9]+)?(_mark)?\.(jpg|png|gif))