我正在尝试匹配字母C D F H I E1 E2 CR(不区分大小写)并想出了这个。它只匹配一个字母,但不匹配E1 E2 CR。实际上它应该。什么是正确的方法呢?
preg_match('/^([C]|[D]|[F]|[H]|[I]|[E1]|[E2]|[CR]?)$/','CR')
答案 0 :(得分:6)
[...]
定义了一个character class,它告诉正则表达式引擎匹配类中的一个元素。出于这个原因,[E1]
实际上意味着匹配E或1 。由于您希望匹配E1
和E2
,因此您可以将这些条件合并到E[12]
(即。E
后跟1
或2
) 。此外,您可以通过将它们组合在一起来简化所有单个字母类。此外,如果您在模式的末尾添加/i
modifier,则会使其不区分大小写。
preg_match('/^([CDFHI]|E[12]|CR)?$/i', 'CR');
请注意,模式末尾的?
会生成前一组optional。请注意,通过使模式的一部分可选(正如您在问题中尝试的那样)或整个模式可选(就像我在我的解决方案中所做的那样),空模式将与此模式匹配。
答案 1 :(得分:6)
考虑到您正在检查的相当有限且具体的代码集,我建议使用
in_array($inputvalue,array('C','D','F','H','I','E1','E2','CR'));
而不是正则表达式 - 它比正则表达式运行得更快,并且更容易在下面进行修改和修改。
答案 2 :(得分:4)
使用:
preg_match('/^(C|D|F|H|I|E1|E2|CR)$/i','CR')
[x]
与x
i
修饰符制作
匹配不区分大小写。