Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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 - Fatal编程技术网

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)/