用数字匹配几个字母和字母

时间:2010-09-17 15:08:29

标签: php regex string preg-match

我正在尝试匹配字母C D F H I E1 E2 CR(不区分大小写)并想出了这个。它只匹配一个字母,但不匹配E1 E2 CR。实际上它应该。什么是正确的方法呢?

preg_match('/^([C]|[D]|[F]|[H]|[I]|[E1]|[E2]|[CR]?)$/','CR')

3 个答案:

答案 0 :(得分:6)

[...]定义了一个character class,它告诉正则表达式引擎匹配类中的一个元素。出于这个原因,[E1]实际上意味着匹配E或1 。由于您希望匹配E1E2,因此您可以将这些条件合并到E[12](即。E后跟12) 。此外,您可以通过将它们组合在一起来简化所有单个字母类。此外,如果您在模式的末尾添加/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')
  • 具有单个字符的char类 [x]x
  • 相同
  • 使用i修饰符制作 匹配不区分大小写。