人数的正则表达式

时间:2015-08-31 13:02:41

标签: php regex

我正在发送短信请求计数。

  

以此格式输入计数: Mx Fx Cx 其中 x 是数字。

可能的值:

  • m0 f0 c0
  • m 0 f 0 c 0
  • M0 F0 C0
  • M 0 F 0 C 0
  • Mxxx0 Fxxx0 Cxxx0
  • Mxxx 0 Fxxx 0 Cxxx 0

验证:

  1. 忽略大小写
  2. 忽略空格
  3. 忽略拼写
  4. 忽略订单或M,F和C.
  5. 至少需要一个(M,F或C)。
  6. 它是一个相当复杂的正则表达式,所以我不确定如何去做。这就是我所拥有的,但它显然只匹配一个案例:

    ^([Mm]\d{1} [Ff]?\d{1} [Cc]?\d{1})$
    

    解决方案

    $pattern = "/^([MmCcFf]\D*\d{1}\s*){1,3}$/";
    $message = "m 3 f 2 c 9";
    preg_match($pattern, $message, $matches);
    if ($matches) {
        $res = preg_match_all("/(\D+)(\d+)/", $matches[0], $values);
        echo print_r($values[2],1);
    }
    

1 个答案:

答案 0 :(得分:3)

我有这个(现在可能不是最简单的):

^([MmCcFf]\D*\d{1}\s*){1,3}$

请参阅Live Demo

Rizier123提出的一些解释:

  • ^表示该行的开头;
  • [MmCcFf]是该组内信函的一个;
  • \D是非数字,后跟*,表示从0到无穷大;
  • \d表示任何数字,后跟{1}仅表示一次;
  • \s是任何空白字符,后跟*,表示从0到无穷大;
  • ([MmCcFf]\D*\d{1}\s*)是以上所有内容的摘要,其次是{1,3},意味着一到三次;
  • $是该行的结尾