需要一个OrderID的正则表达式

时间:2014-01-05 11:32:32

标签: regex

字母P后跟空格或“ - ”符号。 然后直接跟随一个从1到150的数字。 只允许使用完整的数字。不允许像01或023那样重要的零。 然后直接跟着一个点。然后直接跟随A的6个字符,直到和Z 开头的P和最后的6个字符可以是小写的大写字母。

我的范围在1到150之间我做错了...任何人都可以帮助我吗?

这就是我得到的

(?i)p[ -]([1-9]|[1-9][0-9]|1{0,1}[0-5][0-9])[\.][a-z]{6}

正则表达式也会找到这个:

p 01.SLKDOZ

我不希望这样......

2 个答案:

答案 0 :(得分:2)

删除1之后的{0,1}(100之1):(?i)p[ -]([1-9]|[1-9][0-9]|1[0-5][0-9])\.[a-z]{6}

1{0,1}匹配1 0或1次,如果1不匹配,则可以匹配以下0。

答案 1 :(得分:1)

reg.txt

p 1.SLKDOZ
P 150.ABCDEF
P 151.ABCDEF
P 150.ABCDEFG
P 090.ABCDEF
P 005.ABCDEF
P 05.ABCDEF

Perl regx

$ cat reg.txt | perl -nle "chomp($_); print if (/^[pP][- ]([1-9]|[1-9][0-9]|1[0-4][0-9]|150)\.[a-zA-Z]{6}$/g );"

输出是:

p 1.SLKDOZ
P 150.ABCDEF