1

我有一个正则表达式 (REGEX 1) 加上一些 Perl 代码,可以从一个大文本文档中挑选出一个特定的文本字符串,称之为 START_POINT。这个 START_POINT 是我想从大文本文档中提取的较大文本字符串的开头。我想使用另一个正则表达式 (REGEX 2) 从 START_POINT 提取到 END_POINT。我有一组要在正则表达式 (REGEX 2) 中使用的单词,它们很容易找到 END_POINT。这是我的问题。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 回答