如何使用Perl中的regex检查字符串是否符合精确模式

时间:2017-05-12 13:21:14

标签: regex perl

如何检查是否有符合以下规则的文字。

规则[任何字母] [ - ] [任意数字] [:] [任何字母或数字]

例如:ABC-123:Sample message

Perl Code Snippet

print verifyMsg("ABC-123:Sample message");

sub verifyMsg{

    my ($content) = @_;
    if ($content =~/^[a-zA-Z][-][0-9 :a-zA-Z]$/){
        return 1;
    }else{
        return 0;
    }

}

它总是返回0.请告诉我如何让它工作。

2 个答案:

答案 0 :(得分:3)

  

规则[任何字母] [ - ] [任何数字] [:] [任何字母或数字]

但是,问题中提供的输入字符串也包含空格。因此,根据该公式和输入字符串,您需要

/\A[a-zA-Z]+-[0-9]+:[A-Za-z0-9\h]+\z/

<强>详情:

  • \A - 字符串开头
  • [a-zA-Z]+ - 1个或更多(由于+量词)ASCII字母
  • - - 连字符
  • [0-9]+ - 一位或多位
  • : - 冒号
  • [A-Za-z0-9\h]+ - 一个或多个字母数字字符和水平空格(注意:如果您允许使用\h的任何类型的空白字段\s。如果您只是允许有规律的空间,保持原始模式的空间。)
  • \z - 字符串的结尾。

请参阅Perl demo online with this regex

答案 1 :(得分:0)

试试这个:

print verifyMsg("ABC-123:Sample message");

sub verifyMsg{

    my ($content )= @_;
    print"$content\n";
    if ($content =~/^[a-z]+-\d+\:[\w\s+]+$/i){
       return 1;
    }
    else{
      return 0;
   }

 }