【发布时间】:2011-08-31 23:03:59
【问题描述】:
我正在尝试匹配这样的 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 的名称部分。然而,这失败了。 (如果您能看到实现此目的的另一种方法,请告知)。
我认为这与 _ 和 .但我似乎无法弄清楚如何。
例如,如果您从表达式中删除第一个 _,则最后三个测试用例将正确匹配。
【问题讨论】:
-
需要创建七个组吗?
-
@Doug,重要的是我匹配了 URL,以便我可以提取信息(一些女巫是可选的)。我不知道你为什么要问这七组——你能用不同的方式问吗?
-
我想知道您是否正在尝试进行正则表达式查找和替换。如果您尝试使用正则表达式进行替换,那么我的回答是不够的。
-
我正在尝试从 URL/文件名中提取一组可选信息。
标签: regex