1

これは私を夢中にさせています!

  1. txt ファイルを $filestring という文字列に読み込みました。

    sysopen(handle, $filepath, O_RDONLY) or die "WHAT?";
    local $/ = undef;
    my $filestring = <handle>;
    
  2. 動的に生成される $regex というパターン変数を作成しましたが、形式は次のとおりです。

    (a)|(b)|(c)
    
  3. スペースで区切られたパターンのテキストを検索します

    while($filestring =~ m/($regex)\s($regex)/g){
       print "Match: $1 $2\n";
       #...more stuff
    }
    

ほとんどの一致は有効ですが、何らかの理由で次のような一致が時々発生します。

Match: and 

一方、通常の一致には、次のような 2 つの出力が必要です。

Match: , and

誰がこれを引き起こしているのか知っていますか?

編集: NULL 文字がパターンで一致しているようです。

4

1 に答える 1

6

正規表現の各選択肢は、個別のキャプチャ グループです。正規表現全体は次のようになります。

((a)|(b)|(c))\s((a)|(b)|(c))
12   3   4     56   7   8

正規表現の各部分にキャプチャ グループ番号を付けました。

したがって、一致するもの$filestringがないため、空の文字列になります。b a$1b$2(a)

これを回避するには、代替手段として非キャプチャ グループを使用する必要があります。

((?:a)|(?:b)|(?:c))\s((?:a)|(?:b)|(?:c))
于 2012-11-21T23:01:38.313 に答える