0

我需要为 Perl 编写正则表达式以使其匹配/contact(以及 /contact/talk 等之外的所有内容)。

但我也有 URL,/contacts所以我希望它跳过这个。

到目前为止,我只能为完全匹配或为

所以类似于:

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

这也重定向/contacts了我正在努力的所有内容。

4

5 回答 5

1
if ($uri =~ m!/contact(?:/|$)!) {
  #
}
于 2013-04-24T12:45:07.003 回答
0

尝试:

echo -e "/contacts/qqq\n/contact\n/contact/talk\n/ConTact\n/contactx/"|
perl -ne 'm{/contact(?:/|$)} and print'

输出:

/contact
/contact/talk
于 2013-04-24T12:47:08.753 回答
0
if ($uri =~ m/\/contact(?:$|\/)/i ) {
  ## Redirect somewhere
}

将匹配/contact因为$, 和一切喜欢/contact/...

于 2013-04-24T12:42:05.050 回答
0

\b是一个单词边界标记,它可以防止这个匹配出现在单词的中间:

if ($uri =~ m|\bcontact\b|i ) {
   ## Redirect somewhere
}

我会把它添加到开头和结尾,所以你也不匹配foocontact。或者你可以确保在接触之前有一个斜线。

if ($uri =~ m|/contact\b|i ) {
   ## Redirect somewhere
}
于 2013-04-24T12:43:29.080 回答
0
/^\/contact\//

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

于 2013-04-24T13:13:29.927 回答