Regex Perl中问号的精确匹配
我想在字符串数组中查找字符串Regex Perl中问号的精确匹配,regex,perl,Regex,Perl,我想在字符串数组中查找字符串?Allen,但关键字中有问号,这会导致一些问题。 我写这段代码是为了在数组中查找字符串 @arr = ("My name is ?Allen", "My name is ?Allens", "My name is s?Allen", "My name is s?Allens", "My name is ?allen"); $keyword = "?Allen"; for (my $i=0; $i <= 4; $i++){ if ($arr[$i] =~ /
?Allen
,但关键字中有问号,这会导致一些问题。
我写这段代码是为了在数组中查找字符串
@arr = ("My name is ?Allen",
"My name is ?Allens",
"My name is s?Allen",
"My name is s?Allens",
"My name is ?allen");
$keyword = "?Allen";
for (my $i=0; $i <= 4; $i++){
if ($arr[$i] =~ /\b$keyword\b/){
print "str $i = match\n";
}else{
print "str $i = no\n";
}
}
但我只想找到第一个索引数组作为匹配字符串,如下所示:
str 0 = match
str 1 = no
str 2 = no
str 3 = no
str 4 = no
请注意,您的正则表达式包含非word特殊字符,在实际模式中使用它们之前,您需要引用这些字符。此外,特殊字符可以出现在前导/尾随位置这一事实意味着您不能期望
\b
始终以相同的方式工作(因为其含义取决于上下文)。因此,您可以使用
/(?<!\S)\Q$keyword\E(?!\S)/
/(?
在哪里
(?-需要在
\Q$keyword\E
-文字搜索字符串(请参阅)
(?!\S)
-后面应该跟一个空格或字符串结尾
\Q..\E
()的另一个替代方法是使用:
这是在双引号字符串中实现\Q
转义的内部函数
试试/(?@WiktorStribiżew,谢谢。它成功了。$keyword=quotemeta”?Allen“
将是另一种选择。
/(?<!\S)\Q$keyword\E(?!\S)/