2013-05-15 36 views
0

我正在做一些练习来增加我在Perl中的能力,并且遇到了我需要一些指导的情况。Perl上的正则表达式使用getopt参数的查询

目前我使用getopt命令行参数并将其提供给函数1的脚本。 Function1然后进行搜索,并在我设置的表上执行SQL查询,并将结果作为hash_ref返回。然后将函数1的输出分配给一个送入函数2的变量。 Function2采用hash_ref,打印解除引用的结果,并返回值或-1或0,具体取决于hash_ref有键。然后输出该号码,如果打印出-1,则报告没有找到搜索结果。

我现在需要修改我的脚本,使用getopt添加额外的命令行参数,然后通过Regex为每个参数提供结果。

我的问题从根本上说是......这样做的最好方法是什么?我对PERL和正则表达式都非常陌生,但我想我可以找出正则表达式的语法。在将其传递给我的第一个函数之前,我应该分配正则表达式测试吗?我应该在SQL查询本身中执行它(甚至可能吗?我无法找到我想要做的很多正则表达式/ Perl/SQL文档)。

如果需要,我可以添加我的代码,但我更喜欢只是一般的指导,所以我可以自己弄清楚。

+0

您的意思是:如何使用正则表达式来验证参数的格式是否正确? – tadman

+0

基本上我的查询是在一张专业运动员,球衣号码和他们打球的表上。如果我通过脚本与“运动”进行争论,则会打印出使用-s参数进行演奏的所有玩家。如果我传递一个整数-i,我希望它打印出所有名称少于字符的玩家,然后打印出数字。如果我传递了一封信 - 我希望它能打印出所有字母比姓名更早的人。我可以找出那些critera的正则表达式,但我想知道如何正确地将这些正则表达式传递给我的SQL查询 – user2361820

回答

1

你不需要这个正则表达式。

sub getAthletes { 

    my($sport_arg, $number_arg) = @_ 

    $whereclause = " 1=1 "; # start it with this 

    if($sport_arg) { 
    $whereclause .= " and sport = '$sport_arg'" ; 
    } 
    if($number_arg) { 
    $whereclause .= " and jerseynum = $number_arg "; 
    } 
    $query = "SELECT * FROM ATHLETES WHERE $whereclause"; 

    print STDERR "Your query, friend: $query\n"; 

    ... rest of your program here 
} 

GetOptions("s=s", \$sport_arg, 
      "i=s", \$number_arg); 

getAthletes($sport_arg, $number_arg); 
+0

谢谢!这工作。 – user2361820