0

ユーザーが文字列を入力できる簡単なプログラムがあります。この後、ユーザーは正規表現を入力できます。この正規表現と比較する文字列が必要です。

次のコードは機能しません。正規表現は常に失敗します。

そして、文字列を正規表現と比較するのではなく、文字列と文字列を比較しているからかもしれません。

しかし、これをどのように行いますか?

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";
    }
}
4

3 に答える 3

2
  1. グローバル変数の代わりに字句変数を使用します。

  2. によって読み取られる文字列には通常、改行が含まれていることを覚えておく必要があります。そのため、次<>のように で改行を削除する必要がある場合がありますchomp

    chomp(my $input = <STDIN>);
    chomp(my $regex = <STDIN>);
    
  3. ^たとえば、文字列の先頭ではなく、リテラルのサーカムフレックスと一致するように、ユーザーから取得した正規表現の特殊文字を文字通りに解釈したい場合があります。その場合は、\Qエスケープ シーケンスを使用します。

    if ($input =~ /\Q$regex\E/) { ... }
    
  4. Perlの旅では、 Perl FAQを読むことを忘れないでください。質問を指定し始める前に、すべての答えが含まれている可能性があります。

于 2012-04-27T10:15:16.843 に答える
1

//m//、または—を使用する必要がありs///ますが、変数をパターンとして指定できます。

if ($input =~ /$regex/) {
  print "match found\n";
}
于 2012-04-27T10:06:13.807 に答える
0

入力変数と正規表現変数をむさぼり食う必要があると思います。正規表現に一致するように式を修正します

chomp( $input );
chomp( $regex );
if($input =~ /$regex/){
    print "\nThe regex $regex matched the string $input\n\n";
}
于 2012-04-27T10:09:41.730 に答える