Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 在Perl正则表达式中转义特殊字符_Regex_Perl_Escaping_Pattern Matching - Fatal编程技术网

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

Regex 在Perl正则表达式中转义特殊字符,regex,perl,escaping,pattern-matching,Regex,Perl,Escaping,Pattern Matching,我正在尝试匹配Perl中的正则表达式。我的代码如下所示: my $source = "Hello_[version]; Goodbye_[version]"; my $pattern = "Hello_[version]"; if ($source =~ m/$pattern/) { print "Match found!" } 问题在于,当Perl尝试匹配正则表达式时,括号表示字符类(或者我读到的字符类),而匹配最终失败。我知道我可以用\[或\]转义括号,但这需要另一段代码来遍历字符串并

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

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ($source =~ m/$pattern/) {
  print "Match found!"
}
问题在于,当Perl尝试匹配正则表达式时,括号表示字符类(或者我读到的字符类),而匹配最终失败。我知道我可以用
\[
\]
转义括号,但这需要另一段代码来遍历字符串并搜索括号。是否有一种方法可以自动忽略括号而不单独转义它们

快速提示:我不能只添加反斜杠,因为这只是一个示例。在我的真实代码中,
$source
$pattern
都来自Perl代码之外(URICoded或文件)


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

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

您在作业中使用了错误的工具

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

您有一个文本字符串

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

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

可以使用以下命令对表达式中的一组特殊字符进行转义

expression1='带有特殊字符的文本,如$%()'

表达式1=~s/[\?*+\^\$[]\(){}\\\\-]/“\$&”/eg

这将转义所有特殊字符
打印“expression1”;#文本时使用特殊字符,如\$\%()

谢谢!我知道这是一个简单的解决方案,效果非常好!更改了我的“接受答案”,对不起,虽然你的答案很好,但我认为
index()
确实是我想要的。不过,谢谢!什么是“regex”字符"? 我的印象是正则表达式只是一种匹配字符串或字符串中模式的方法,而不是一组特定的字符,除非它还有另一种我不知道的含义?尽管如此,还是要感谢index()。明天当我在服务器上时,我会试一试;我确实认为index()比regex匹配更好、更干净。“regex字符”是一个打字错误,我的意思是写“regex元字符”。当查找带有@sign-in$source的字符串时,它不起作用。
my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ( index($source, $pattern) != -1 ) {
    print "Match found!";
}