Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在另一个正则表达式中使用来自正则表达式的匹配:跳过元字符_Regex_Perl - Fatal编程技术网

Regex 在另一个正则表达式中使用来自正则表达式的匹配:跳过元字符

Regex 在另一个正则表达式中使用来自正则表达式的匹配:跳过元字符,regex,perl,Regex,Perl,我有一个正则表达式(regex1)和一些Perl代码,它们从一个大的文本文档中挑选出一个特定的文本字符串,称之为起始点。这个起点是我想从大型文本文档中提取的更大文本字符串的起点。我想使用另一个正则表达式(regex2)从起点提取到终点。我在正则表达式(regex2)中使用了一组单词,可以很容易地找到端点。这是我的问题。起始点文本字符串可能包含元字符,正则表达式将对其进行不同的解释。我不知道这些会是什么。我正在尝试处理一大组文本文档,每个文档的起点都会有所不同。如何让正则表达式将文本字符串解释为文

我有一个正则表达式(regex1)和一些Perl代码,它们从一个大的文本文档中挑选出一个特定的文本字符串,称之为起始点。这个起点是我想从大型文本文档中提取的更大文本字符串的起点。我想使用另一个正则表达式(regex2)从起点提取到终点。我在正则表达式(regex2)中使用了一组单词,可以很容易地找到端点。这是我的问题。起始点文本字符串可能包含元字符,正则表达式将对其进行不同的解释。我不知道这些会是什么。我正在尝试处理一大组文本文档,每个文档的起点都会有所不同。如何让正则表达式将文本字符串解释为文本字符串,而不是带有元字符的文本字符串

也许这段代码将有助于理解这一点$起始点在这段代码上面的代码中标识,是大型文本字符串$text的提取部分

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

my @NFS = $TEXT =~ m/(($START_POINT).*?($END_POINT))/misog;
我曾尝试使用quotemeta函数,但没有成功。通过添加斜杠来更改文本,似乎破坏了$START_POINT文本字符串的完整性

总之,我正在寻找某种方法,告诉正则表达式在$START_POINT中查找精确的字符串,而不将任何字符串解释为元字符,同时仍保持字符串的完整性。虽然我可以让quotemeta正常工作,但你知道还有其他选择吗


提前感谢您的帮助

您需要将文本转换为正则表达式模式。这就是
quotemeta
所做的

 my $start = '*';
 my $start_pat = quotemeta($start);  # * => \*
 /$start_pat/                        # Matches "*"
quotemeta
可通过
\Q..\E
访问:

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

为什么要重新实现
quotemeta

能否显示一个示例字符串,其中
quotemeta
为您做了错误的事情?在一般情况下,它添加的反斜杠(而不是斜杠)正好满足您的要求。