[英]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";
}
}
您應該記住, <>
讀取的字符串通常包含換行符,因此可能有必要使用chomp
刪除換行符,如下所示:
chomp(my $input = <STDIN>); chomp(my $regex = <STDIN>);
您可能希望按字面解釋從用戶獲取的正則表達式特殊字符,以使^
與文字的抑音符匹配,而不是與字符串的開頭匹配。 如果是這樣,請使用\\Q
轉義序列:
if ($input =~ /\\Q$regex\\E/) { ... }
在您瀏覽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.