我正在尝试这样的匹配网址:
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的名称部分允许_。然而,这失败了。 (如果你能看到实现这个目标的另一种方式,请告诉我们。)
我认为这与_和。有关。但我似乎无法弄清楚如何。
例如,如果从表达式中删除第一个_,则最后三个测试用例将正确匹配。
答案 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))