正则表达式捕获大多数交替模式

时间:2014-08-15 19:23:49

标签: regex

我有以下文件名应该通过正则表达式

6505208533_95d2834be5_b@2x.jpg
6505208533_95d2834be5_b~ipad.jpg
6505208533_95d2834be5_b~ipad@2x.jpg
6505218557_8407260688_b@2x.png
6505218557_8407260688_b~ipad.png
6505218557_8407260688_b~ipad@2x.png
6505237749_b71c648be2_b@2x.jpg
6505237749_b71c648be2_b~ipad.jpg
6505237749_b71c648be2_b~ipad@2x.jpg

以下正则表达式应捕获所有文件名后缀:~ipad @ 2x,@ 2x和~ipad。

(.+)(@2x|~ipad|~ipad@2x)\.(?:jpg|png)

但是,它不会捕获~ipad@2x。怎么解决?

2 个答案:

答案 0 :(得分:2)

您应该在.+之后使用惰性运算符:

(.+?)

而不是:

(.+)

否则它将尝试贪婪并匹配最长的字符串(demo)。

答案 1 :(得分:0)

更好,更语义正确的解决方案是简单地更改后缀的顺序,因为在搜索中从未到达组合后缀“~ip2 @ 2x”,因为它是另外两个始终匹配的组合:< / p>

(.+?)(~ipad@2x|@2x|~ipad)\.(?:jpg|png)