Regex 匹配特定模式的URL

Regex 匹配特定模式的URL,regex,Regex,我正在尝试匹配如下URL: 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 使用此正则表达式: (.

我正在尝试匹配如下URL:

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的名称部分插入。然而,这是失败的。如果你能找到实现这一目标的另一种方法,请告诉我

我认为这与uu和。但我似乎不知道怎么做


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

这就是您要查找的吗?它与您的所有示例都匹配


这就是你要找的吗?它与您的所有示例都匹配

[^\.]+[0-9]+x[0-9]+?\U 3600?\U 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))

你需要创建七个组吗?@Doug,重要的是我要匹配URL,以便提取一些可选的信息。我不知道你为什么问这七个组-你能用另一种方式问吗?我想知道你是否在尝试使用正则表达式查找和替换。如果您试图使用regex进行替换,那么我的回答将不够。我试图从URL/文件名中提取一组可选信息。您需要创建七个组吗?@Doug,重要的是我匹配URL,以便提取一些可选信息。我不知道你为什么问这七个组-你能用另一种方式问吗?我想知道你是否在尝试使用正则表达式查找和替换。如果您试图使用regex进行替换,那么我的回答就不够了。我试图从URL/filename.No中提取一组可选信息,因为如果您查看匹配的组,除了扩展名之外,其他所有组都进入第一个组[^\.]+。您可以将所有内容移动到最后并实现相同的效果。不,因为如果您查看匹配的组,除了扩展名之外,所有内容都会进入第一个组[^\.]+。您可以将所有内容移动到最后,并实现相同的效果。很酷,只需对分组进行一些修改,就可以了。你能解释一下为什么一开始是懒惰的比赛吗?将使用下划线匹配所有内容,而不仅仅是s。通过此修改,+?:[0-9]+x[0-9]+??[0-9]+??[0-9]+?\U标记。jpg | png | gif它将匹配我问题中的组。@Michael:它将匹配,直到找到一个下划线,后跟一个数字或一个小标记,如果没有匹配,它将转到分机。谢谢您的解释。它毕竟不是那么懒。heheCool,对分组进行一些修改后,就可以工作了。你能解释一下为什么一开始是懒惰的比赛吗?将使用下划线匹配所有内容,而不仅仅是s。通过此修改,+?:[0-9]+x[0-9]+??[0-9]+??[0-9]+?\U标记。jpg | png | gif它将匹配我问题中的组。@Michael:它将匹配,直到找到一个下划线,后跟一个数字或一个小标记,如果没有匹配,它将转到分机。谢谢您的解释。它毕竟不是那么懒。呵呵