转义Perl正则表达式中的特殊字符

CoV*_*oV 6 regex perl escaping pattern-matching

我正在尝试匹配Perl中的正则表达式.我的代码如下所示:

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ($source =~ m/$pattern/) {
  print "Match found!"
}
Run Code Online (Sandbox Code Playgroud)

问题出现在括号表示Perl尝试匹配正则表达式时的字符类(或者我读过),并且匹配最终失败.我知道我可以用\[or 来转义括号\],但这需要另一段代码来遍历字符串并搜索括号.是否有一种方法可以自动忽略括号而不单独转义它们?

快速说明:我不能只添加反斜杠,因为这只是一个例子.在我的真实代码中,$source并且$pattern都来自Perl代码之外(URIEncoded或来自文件).

mar*_*cho 12

\Q将禁用元字符,直到\E找到或模式结束.

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ($source =~ m/\Q$pattern/) {
  print "Match found!"
}
Run Code Online (Sandbox Code Playgroud)

http://www.anaesthetist.com/mnm/perl/Findex.htm


Ped*_*lva 11

使用quotemeta():

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = quotemeta("Hello_[version]");
if ($source =~ m/$pattern/) {
  print "Match found!"
}
Run Code Online (Sandbox Code Playgroud)


tad*_*dmc 10

您正在使用错误的工具来完成工作.

你没有模式!$ pattern中没有正则表达式字符!

你有一个文字字符串.

index()用于处理文字字符串...

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ( index($source, $pattern) != -1 ) {
    print "Match found!";
}
Run Code Online (Sandbox Code Playgroud)