如何编写与可选子字符串匹配的PHP正则表达式?

问题描述

| 好的,所以现在我有两个问题。 我有一个文件名列表。其中一些文件名可能包含HTML十六进制颜色参考。就像
#11AACC
。另外,我只对图像文件(扩展名jpg,jpeg,png,gif和bmp)感兴趣。因此,我想要一个正则表达式,如果文件扩展名是上述之一,则该正则表达式将匹配,此外,如果字符串中任何位置都有HTML颜色引用,它也会被捕获。如果有多个引用,我不在乎会捕获哪个引用(应该只有一个),但是应该捕获一个引用。也可以有多个,我可以忽略除第一个以外的其余部分。哦,整个事情都应该不区分大小写,但这是最少的麻烦。 如有必要,我可以限制颜色参考的位置。但是,我希望它位于扩展名之前,因为否则命名这些文件将很麻烦。 我正在尝试执行
/(#[a-fA-F]{6})?\\.(?:jpeg|jpg|png|gif|bmp)$/i
/(#[a-fA-F]{6})?.*\\.(?:jpeg|jpg|png|gif|bmp)$/i
之类的操作,但是它没有捕获颜色参考。     

解决方法

是因为你的角色阶级
[a-fA-F]
哪个代表十六进制数字缺少数字? 尝试
[a-fA-F0-9]
由于您使用
i
修饰符来区分大小写,因此可以使用:
[a-f0-9]