数字,字母和:的正则表达式

时间:2019-05-03 00:48:59

标签: php regex

我正在尝试为特定字符串编写正则表达式: 每个要匹配的字符串应以数字[1-9]开头,并且可以包含也可以不包含前缀。

例如:

0  - not match
1  - match
9  - match 
2: - not match
3:ABC - match
4:56ARD20 - match
5:56ARD20(any other chars except [0-9A-Z]) - not match

A:5GTS - not match (just a digits in the first part)
A1:GRT - not match (just a digits in the first part)

:FDE3  - not match (first part should contain only digits)
:      - not match (empty first digital part)

因此字符串的第一部分->仅是数字(强制性)。 字符串可以包含一个后缀[0-9A-Z]的符号(:)。

谢谢!

2 个答案:

答案 0 :(得分:3)

正则表达式^[1-9]\d*(?::[A-Z\d]+)?$

可读

 ^                    # BOS
 [1-9] \d*            # Digit(s) required (can only start with 1-9
 (?:                  # Optional group
      :                    # Colon
      [A-Z\d]+             # Upper case letters or digits
 )?
 $                    # EOS

答案 1 :(得分:1)

尝试下一个代码

<?php

        $regExp = "/^[1-9][0-9]*(:[0-9A-Z]+)?$/";
        $test = array("0", "1", "2:", "3:ABC", "5:56ARD20*", "A1:GRT", " ", ":FDE3" , ":" );
        foreach( $test as $val) {
                echo "$val",  "  -> " , preg_match($regExp, $val), "\n";
        }


?>

小改进:“数字”应以[1-9]开头,之后允许为0。