0

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

我有一个单词列表,即:

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

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

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

我从这个开始:

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

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

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

任何帮助,将不胜感激。

提前致谢。

4

1 回答 1

0

这是您可以使用的模式:

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

更新

由于单词边界被认为my-test是 2 个单词,所以我建议:

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

    $a = str_replace("-","",$a); preg_match($mine,$a,$m1);

现在这是你得到的输出:

array(2) {
  [0]=>
  string(4) "yeah"
  [1]=>
  string(4) "yeah"
}
于 2012-11-29T18:10:26.940 回答