【问题标题】:Regex on Perl Queries using getopt arguments使用 getopt 参数对 Perl 查询进行正则表达式
【发布时间】:2013-05-16 08:45:32
【问题描述】:

我正在做一些练习来提高我在 Perl 方面的能力,并且遇到了需要一些指导的情况。

目前我有一个脚本,它使用 getopt 获取命令行参数并将其提供给 function1。 Function1 然后进行搜索,并对我设置的表执行 SQL 查询,并将结果作为 hash_ref 返回。然后将 function1 的输出分配给一个变量,该变量被馈送到 function2。 Function2 获取 hash_ref,打印取消引用的结果,并根据 hash_ref 的键返回值或 -1 或 0。然后输出该数字,如果打印 -1,则报告未找到搜索结果。

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

我的问题是从根本上说……最好的方法是什么?一般来说,我对 PERL 和正则表达式非常陌生,但我想我可以弄清楚正则表达式的语法。我应该在将正则表达式测试传递给我的第一个函数之前分配它吗?我是否应该在 SQL 查询本身中执行此操作(这甚至可能吗?我找不到太多关于我正在尝试做的 Regex/Perl/SQL 文档)。

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

【问题讨论】:

  • 您的意思是:如何使用正则表达式来验证参数的格式是否正确?
  • 基本上我的查询是关于职业运动员、球衣号码和他们从事的运动的表格。如果我向脚本传递一个带有“Sport”的参数,它会打印出所有使用 -s 参数玩该游戏的玩家。如果我给它传递一个整数 -i 我希望它打印出所有名字比数字少的玩家。如果我给它传递一个字母 -l 我希望它打印出所有在字母表中的名字在字母表中比传递的字母更早的玩家。我可以找出这些标准的正则表达式,但我想知道如何正确地将这些正则表达式传递给我的 SQL 查询

标签: sql regex perl


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2011-06-15
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多