使用strpos()函数查找完整单词

4

大家好 :) 我正在尝试使用strpos()函数来查找句子中的整个单词。但目前,它也会在单词只是其他单词的一部分时找到该单词。例如:

$mystring = "It's a beautiful morning today!";
$findme   = "a";

$pos = strpos($mystring, $findme);

在这个例子中,它会找到单词"a"中的"a"(应该是这样的),但也会在"beautiful"中找到它,因为其中有一个"a"。
如何只查找整个单词而不是其他单词的一部分?

肯定有比使用 strpos() 更好的方法来完成这个任务,那么为什么有限制呢? - Mark Baker
3个回答

13

这是正则表达式的工作:

$regex = '/\b'.$word.'\b/';

基本上,它是找到被单词边界(\b 部分)包围的字母。因此,要找到位置:

preg_match($regex, $string, $match, PREG_OFFSET_CAPTURE);
$pos = $match[0][1];

如果您不确定单词的结尾在哪里?在我的情况下,这是一个YouTube网址,可能附带有随机查询字符串,我只需要知道它的开头和结尾位置。 - Marcos Di Paolo

3
使用正则表达式,使用单词边界定界符\b,像这样:
$mystring = "It's a beautiful morning today!";
preg_match_all('/\ba\b/', $mystring, $matches, PREG_OFFSET_CAPTURE);
var_dump($matches);

返回

array(1) {
  [0]=>
  array(1) {
    [0]=>
    array(2) {
      [0]=>
      string(1) "a"
      [1]=>
      int(5)
    }
  }
}

嘿,Xavier。我无法让这个解决方案运行。你有其他的解决方案吗? - Simon Thomsen
我找到了!如果我只是在单词周围加上空格,它就可以工作了。感谢您的时间!;) - Simon Thomsen
1
在字符串的开头或结尾加上空格并不能检测到它。 - AbiusX

0

正则表达式对于初学者来说很困难,另一种方式(我承认这不是最好的方法)是使用
$findme = " a "


我找到了!如果我只是在单词周围加上空格,它就可以工作了。感谢您的时间!;) - Simon Thomsen
1
那个答案是错误的。如果单词是第一个或最后一个,它将无法找到。 - ElChupacabra
@ElChupacabra:“我承认这不是最好的。” - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接