Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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正则表达式URL包含字符串,但不包含类似的字符串_Regex_Perl - Fatal编程技术网

Regex Perl正则表达式URL包含字符串,但不包含类似的字符串

Regex Perl正则表达式URL包含字符串,但不包含类似的字符串,regex,perl,Regex,Perl,我需要为Perl编写正则表达式,以便它匹配/contact(以及so/contact/talk以外的所有内容) 但是我还有/contacts的URL,所以我希望它跳过这个 到目前为止,我只能为精确匹配或精确匹配编写代码 因此,大致如下: if ($uri =~ m/contact/i ) { ## Redirect somewhere } 这也重定向了/contacts中的所有内容,尽管这正是我努力的方向 if ($uri =~ m/\/contact(?:$|\/)/i ) { #

我需要为Perl编写正则表达式,以便它匹配
/contact
(以及so/contact/talk以外的所有内容)

但是我还有
/contacts
的URL,所以我希望它跳过这个

到目前为止,我只能为精确匹配或精确匹配编写代码

因此,大致如下:

if ($uri =~ m/contact/i ) {
   ## Redirect somewhere
}
这也重定向了
/contacts
中的所有内容,尽管这正是我努力的方向

if ($uri =~ m/\/contact(?:$|\/)/i ) {
  ## Redirect somewhere
}

将匹配<代码> /联系人< /代码>,因为<代码> $< /代码>,并且所有类似“代码> /联系人/…< /代码>

< p> <代码> \b/COD>是一个单词边界标记,它阻止了该匹配在单词的中间:

if ($uri =~ m|\bcontact\b|i ) {
   ## Redirect somewhere
}
我会将其添加到开头和结尾,因此您也不会匹配
foocontact
。或者,您可以确保在contact之前有一个斜杠

if ($uri =~ m|/contact\b|i ) {
   ## Redirect somewhere
}
尝试:

输出:

/contact
/contact/talk

这里有一些猜测-您的URL似乎以
/contact
开头,如果没有,请删除初始插入符号。

是的。。我在5分钟前发布了:/@Loamhoof::)对不起,检查结果花了时间。。。我不认为有太多的差异来解决这个问题……URI应该是区分大小写的(至少是路径部分),不是吗?
echo -e "/contacts/qqq\n/contact\n/contact/talk\n/ConTact\n/contactx/"|
perl -ne 'm{/contact(?:/|$)} and print'
/contact
/contact/talk
/^\/contact\//