preg_match start,以空格之间的单词或单词结束

时间:2012-11-29 18:02:10

标签: php preg-match

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

我有一个单词列表,即:

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

目标是了解列表中是否存在特定单词。例如,我想要检索“是”,“测试”或“书籍”这两个词,但只有当它们是完整的单词时,才能找到像“my-test”这样的组合单词才能找到测试......

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

我从这开始:

"/^.+ (yeah|test|book|) .+/"

但我不知道如何进行测试:如果这个词在第一个或最后一个地方,或者这个词是在空格之间......我想到这样的事情:

"/(^.+ |^)(yeah|test|book)( .+|)"

任何帮助都将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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

\b适用于word boundaries

示例:

$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"
}

更新

由于单词边界正在考虑将my-test视为2个字,因此我建议:

  1. 首先执行字符串替换以删除破折号
  2. 运行正则表达式。

    $ a = str_replace(“ - ”,“”,$ a); 的preg_match($矿,$ A,$ M1);

  3. 现在这是你得到的输出:

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