2013-05-15 38 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