1

正規表現(REGEX 1)に加えて、大きなテキストドキュメントから特定のテキスト文字列をSTART_POINTと呼ぶPerlコードがあります。このSTART_POINTは、大きなテキストドキュメントから抽出したい大きなテキスト文字列の始まりです。別の正規表現(REGEX 2)を使用して、START_POINTからEND_POINTに抽出したいと思います。END_POINTを簡単に見つけることができる正規表現(REGEX 2)で使用する単語のセットがあります。これが私の問題です。START_POINTテキスト文字列には、正規表現によって異なる方法で解釈されるメタ文字が含まれている場合があります。これらがどれになるかは前もってわかりません。大量のテキストドキュメントを処理しようとしていますが、START_POINTはドキュメントごとに異なります。

おそらく、このコードはこれがより理にかなっているのに役立つでしょう。$ START_POINTは、このコードの上のコードで識別され、大きなテキスト文字列$TEXTの抽出された部分です。

my $END_POINT = "(STOP|CEASE|END|QUIT)";

my @NFS = $TEXT =~ m/(($START_POINT).*?($END_POINT))/misog;

quotemeta関数を使おうとしましたが、うまくいきませんでした。テキストを変更するスラッシュを追加することにより、$START_POINTテキスト文字列の整合性を破壊しているようです。

要約すると、文字列の整合性を維持しながら、文字列をメタ文字として解釈せずに、$START_POINTで正確な文字列を検索するように正規表現に指示する方法を探しています。quotemetaを機能させることができるかもしれませんが、他に利用可能なオプションを知っていますか?

よろしくお願いします!

4

1 に答える 1

0

テキストを正規表現パターンに変換する必要があります。それが何をするかquotemetaです。

 my $start = '*';
 my $start_pat = quotemeta($start);  # * => \*
 /$start_pat/                        # Matches "*"

quotemeta経由でアクセスできます\Q..\E

 my $start = '*';
 /\Q$start_pat\E/                    # Matches "*"

なぜ再実装するのquotemetaですか?

于 2012-07-12T03:41:48.620 に答える