Php preg_匹配开始、结束于单词或空格之间

Php preg_匹配开始、结束于单词或空格之间,php,preg-match,Php,Preg Match,我试图为php preg_match函数构建一个正则表达式,但我对这种逻辑非常不熟悉 我有一张字表,即: “这是我的测试是的” “考试是件好事” “这是一本好书” 目的是了解列表中是否存在特定的单词。例如,我想检索单词“yeah”、“test”或“book”,但前提是它们是完整的单词,而不是像“my test”这样的合成单词来查找测试 正则表达式必须测试搜索的单词是在空格之间、字符串的开头还是结尾。但是我没有找到正确的方法 我从这个开始: "/^.+ (yeah|test|book|) .+/"

我试图为php preg_match函数构建一个正则表达式,但我对这种逻辑非常不熟悉

我有一张字表,即:

“这是我的测试是的” “考试是件好事” “这是一本好书”

目的是了解列表中是否存在特定的单词。例如,我想检索单词“yeah”、“test”或“book”,但前提是它们是完整的单词,而不是像“my test”这样的合成单词来查找测试

正则表达式必须测试搜索的单词是在空格之间、字符串的开头还是结尾。但是我没有找到正确的方法

我从这个开始:

"/^.+ (yeah|test|book|) .+/"
但是我不知道如何做这样的测试:如果单词在第一或结尾,或者单词在空格之间。。。我会这样想:

"/(^.+ |^)(yeah|test|book)( .+|)"
任何帮助都将不胜感激


提前感谢。

以下是您可以使用的模式:

$pattern = "/\b(yeah|test|book)/";
\b
用于

例如:

$a = "this is my-test yeah";
$b = "test is a good thing";
$c = "this is a good book";

preg_match($mine,$a,$m1);
preg_match($mine,$b,$m2);
preg_match($mine,$c,$m3);

var_dump($m1,$m2,$m3);
这将打印:

array(2) {
  [0]=>
  string(4) "test"
  [1]=>
  string(4) "test"
}
array(2) {
  [0]=>
  string(4) "test"
  [1]=>
  string(4) "test"
}
array(2) {
  [0]=>
  string(4) "book"
  [1]=>
  string(4) "book"
}
更新
由于单词边界考虑将我的测试设为两个单词,因此我建议:

  • 首先进行字符串替换以删除破折号
  • 运行regex模式

    $a=str_替换(“-”、“”、$a); 预赛($mine,$a,$m1)

  • 现在,这是您得到的输出:

    array(2) {
      [0]=>
      string(4) "yeah"
      [1]=>
      string(4) "yeah"
    }
    

    谢谢Ibu的回答,但它并不完全符合我的要求。。。不幸的是,第一个数组必须返回“yes”,而不是“test”,因为在字符串中,test不是一个单词(我的test)。我不知道为什么第一个字符串中的“单词边界”提取“test”,但这不是我想要的行为。我的最终目标是在标记的类属性中提取一些类,如果我搜索“col1”,如果有一个名为“single-item-col1”的类,我不想检索TRUE。仅当单词开头为:“col1…”、介于“…col1…”之间或结尾为“…col1…”时,才会返回TRUE