簡體   English   中英

如何使用用戶輸入作為正則表達式?

[英]How to use an user input as a regex?

我有一個簡單的程序,用戶可以在其中輸入字符串。 此后,用戶可以輸入正則表達式。 我需要將字符串與此正則表達式進行比較。

以下代碼不起作用-正則表達式總是失敗。

而且我知道這可能是因為我正在將字符串與字符串進行比較,而不是將字符串與正則表達式進行比較。

但是你會怎么做呢?

while(1){
    print "Enter a string: ";
    $input = <>;
    print "\nEnter a regex and see if it matches the string: ";
    $regex = <>;

    if($input =~ $regex){
        print "\nThe regex $regex matched the string $input\n\n";
    }
}
  1. 使用詞法變量而不是全局變量

  2. 您應該記住, <>讀取的字符串通常包含換行符,因此可能有必要使用chomp刪除換行符,如下所示:

     chomp(my $input = <STDIN>); chomp(my $regex = <STDIN>); 
  3. 您可能希望按字面解釋從用戶獲取的正則表達式特殊字符,以使^與文字的抑音符匹配,而不是與字符串的開頭匹配。 如果是這樣,請使用\\Q轉義序列:

     if ($input =~ /\\Q$regex\\E/) { ... } 
  4. 在您瀏覽Perl的過程中,請不要忘記閱讀Perl FAQ 在甚至開始指定問題之前,它可能已經解決了所有問題: 如何匹配變量中的正則表達式?

您需要使用//m//s/// ,但是您可以將變量指定為模式。

if ($input =~ /$regex/) {
  print "match found\n";
}

我認為您需要壓縮輸入和正則表達式變量。 並更正表達式以匹配正則表達式

chomp( $input );
chomp( $regex );
if($input =~ /$regex/){
    print "\nThe regex $regex matched the string $input\n\n";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM