匹配几个字母和字母与数字的组合

3

我正在尝试匹配字母C D F H I E1 E2 CR(大小写不敏感),并且想出了以下解决方法。它可以匹配单个字母,但无法匹配E1 E2 CR。实际上应该可以匹配。请问正确的做法是什么?

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

6

[...] 定义一个字符类, 告诉正则表达式引擎在类中匹配一个元素。因此,[E1] 实际上表示匹配 E 或 1。由于你想匹配 E1E2,你可以将这些条件组合成 E[12] (即 E 后跟 12)。此外,你可以将所有单个字母类简化为一起。另外,如果在模式末尾添加 /i 修饰符,则会使它不区分大小写。

preg_match('/^([CDFHI]|E[12]|CR)?$/i', 'CR');

注意,模式末尾的?使前面的组变成可选。请注意,通过将模式的一部分(就像您在问题中试图做的那样)或整个模式(就像我在解决方案中所做的那样)变为可选,此模式将匹配一个空字符串。

6

考虑到您要检查的代码数量相对较少且具体,建议使用

in_array($inputvalue,array('C','D','F','H','I','E1','E2','CR'));

使用字符串匹配而不是正则表达式来进行匹配,这样可以提高程序的运行速度,同时后续的修改和理解也更加容易。


我喜欢这里的简单性而不是正则表达式。只需确保首先使用 strtoupper($inputvalue) - brian_d
感谢您指向in_array函数。它比正则表达式容易得多。 - Norman

4

使用:

preg_match('/^(C|D|F|H|I|E1|E2|CR)$/i','CR')
  • [x]这样只有一个字符的字符类与x相同。
  • 使用i修饰符可使匹配不区分大小写。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接