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

xmq68pz9  于 2022-12-13  发布在  Perl
关注(0)|答案(4)|浏览(172)

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

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

问题在于,当Perl试图匹配正则表达式时,方括号表示一个字符类(至少我是这么读的),匹配以失败告终。我知道我可以用\[\]来转义方括号,但这需要另一个代码块来遍历字符串并搜索方括号。有没有一种方法可以自动忽略方括号而不单独转义它们?
注意:我不能只添加反斜杠,因为这只是一个例子。在我的真实的代码中,$source$pattern都来自Perl代码之外(URIEncoded或来自一个文件)。

ulmd4ohb

ulmd4ohb1#

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

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

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

8ljdwjyq

8ljdwjyq2#

使用quotemeta()

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

fcg9iug33#

您正在使用错误的工具进行作业。
您没有模式!$pattern中没有正则表达式字符!
您有一个文字字符串。
index()用于处理文本字符串...

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

jrcvhitl4#

您可以使用下列指令,逸出运算式中的一组特殊字符。

expression1 = 'text with special characters like $ % ( )';

expression1 =~s/[\?\*\+\^\$\[\]\\\(\)\{\}\|\-]/"\\$&"/eg ;

#This will escape all the special characters
print "expression1'; # text with special characters like \$ \% \( \)

相关问题