如何在没有意外匹配的情况下在 PHP 中的字符串中查找整个单词?

Posted

技术标签:

【中文标题】如何在没有意外匹配的情况下在 PHP 中的字符串中查找整个单词?【英文标题】:How to find a whole word in a string in PHP without accidental matches? 【发布时间】:2011-05-18 13:53:03 【问题描述】:

解析一个字符串命令数组,我需要知道一个字符串是否包含特定的关键字。

我知道听起来很简单,但是当命令关键字也可能是另一个词的一部分时,问题就来了。

例如:

CHECKSOUND
SOUND
CHECK

所以我需要检查当前行是否有 CHECKSOUND、SOUND 或 CHECK 命令。

如果我使用类似的东西:

if(stristr($line,'SOUND') == true)

那么它可能会在SOUND 之前找到CHECKSOUND,因此无法正确解析。

问题

有没有办法只查找整个单词(如 SOUND)的出现,如果发现作为另一个单词(如 CHECKSOUND)的一部分,则忽略出现的 SOUND?

我确定我在这里遗漏了一些简单的东西。

【问题讨论】:

【参考方案1】:

您可以使用正则表达式轻松实现目标。

preg_match 文档中的示例 #2:

/* The \b in the pattern indicates a word boundary, so only the distinct
 * word "web" is matched, and not a word partial like "webbing" or "cobweb" */
 if (preg_match("/\bweb\b/i", "php is the web scripting language of choice.")) 
     echo "A match was found.";
  else 
     echo "A match was not found.";
 

请注意,上面的示例使用了i 修饰符,这使得搜索“web”不区分大小写。

【讨论】:

以上是关于如何在没有意外匹配的情况下在 PHP 中的字符串中查找整个单词?的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 5.3 中,如何在没有严格警告的情况下在一行中获取单个元素数组中的值

如何在没有 foreach 的情况下在 PHP 中使用键和值来内爆数组

如何在没有 Artisan 的情况下在 Xampp 上运行 laravel

如何在没有加入的情况下在 BigQuery 的同一个表中选择匹配项

如何在没有附加查询的情况下在 SQL Server 中连接没有子查询的 GROUP BY 子句中的字符串?

如何在没有jQuery的情况下在javascript中执行php文件