【发布时间】:2013-02-15 17:18:07
【问题描述】:
我对正则表达式非常迷茫。这对我来说只是黑魔法。这是我需要的:
- 有一个文件名:some_file.jpg
- 可能采用以下格式:some_file_p250.jpg
- 以简单格式匹配文件的正则表达式:/^([a-zA-Z_-0-9]+).(jpg|jpeg|png)$/
- 匹配高级格式文件的正则表达式:/^([a-zA-Z_-0-9]+)(_[az]?[0-9]{2,3}).(jpg| jpeg|png)$/
我的问题如下:如何使 "(_[a-z]?[0-9]{3,4})" 部分可选?我尝试向第二组添加一个问号,如下所示:
/^([a-zA-Z_\-0-9]+)(_[a-z]?[0-9]{3,4})?\.(jpg|jpeg|png)$/
即使该模式有效,它总是会在第一组中捕获第二组的内容,并将第二组的内容留空。
如何使这项工作分别捕获文件名、高级部分 (_p250) 和扩展名?我认为这与第一组的贪婪有关,但我可能完全错了,即使我是对的,我仍然不知道如何解决它。
感谢您的意见
【问题讨论】:
-
你用什么语言写这个? Perl?
-
@Imortenson 在 PHP 的 PCRE(perl 兼容的正则表达式)中