[英]Escaping special characters in Perl regex
我正在尝试匹配 Perl 中的正则表达式。我的代码如下所示:
my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ($source =~ m/$pattern/) {
print "Match found!"
}
问题出现在当 Perl 试图匹配正则表达式时,括号指示字符 class(或者我读到的),并且匹配最终失败。 我知道我可以使用\[
或\]
转义括号,但这需要通过字符串将另一个代码块添加到 go 并搜索括号。 有没有办法让括号自动忽略而无需单独使用 escaping?
快速说明:我不能只添加反斜杠,因为这只是一个示例。 在我的真实代码中, $source
和$pattern
都来自 Perl 代码之外(URIEncoded 或文件)。
\\Q
将禁用元字符,直到找到\\E
或模式结束。
my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ($source =~ m/\Q$pattern/) {
print "Match found!"
}
使用quotemeta() :
my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = quotemeta("Hello_[version]");
if ($source =~ m/$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 ='带有特殊字符的文本,如$%()';
expression1 = ~s / [\\?* + \\ ^ \\ $ [] \\(){} \\ | - ] /“\\ $&”/ eg;
print“expression1”;#text包含特殊字符,如\\ $ \\%()
引用$pattern
破坏正则表达式的目的,除非它被用作已知字面并被转换为真正的正则表达式。
编辑
否则,只需使用index()
来查找子字符串的位置。 有了这些信息,只需使用substr()
在必要时提取周围的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.