使用preg_match只匹配整个键盘而不是它的一部分

时间:2013-12-30 21:01:21

标签: php preg-match

不确定如何解决这个问题。

但是我需要检查我网址的一部分是否匹配。

问题在于它正在另一个网址中查找该部分字词而我不想要这个。

如果找到确切的单词,我只希望它能给出结果。

所以我有这个:

if (preg_match('@news?@i',$_SERVER['REQUEST_URI'])) {
    // match
}

这为/news.php的URL提供了匹配,但如果URL为/newupdated,它也会给出匹配

任何帮助?

2 个答案:

答案 0 :(得分:0)

使用parse_url代替正则表达式。 parse_url更可靠,允许您匹配只是您的路径。

<?php

  $myURL = parse_url( $_SERVER['PATH_INFO'] );
  if ($myURL['path'] == 'news.php') {
      // Match
  }

答案 1 :(得分:0)

您可能正在寻找word boundary anchor, \b。像@\bfoo\b@这样的模式将匹配foo,但不匹配food

句点和斜杠充当单词分隔符:

php > var_dump(preg_match('@\bnews?\b@i', 'foo/newlyupdated.php'));
int(0)
php > var_dump(preg_match('@\bnews?\b@i', 'foo/news.php'));
int(1)
php > var_dump(preg_match('@\bnews?\b@i', 'foo/new.php'));
int(1)