Regex 在Perl正则表达式中转义特殊字符
我正在尝试匹配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尝试匹配正则表达式时,括号表示字符类(或者我读到的字符类),而匹配最终失败。我知道我可以用\[或\]转义括号,但这需要另一段代码来遍历字符串并
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!";
}