在其他单词之间查找单词

Finding words in between other words

我有一个单词长度不同的句子。下面句子中的 x 代表随机词,x1、x2、x3 代表固定词——不变的词。基本上,x1 就是 x1,x2 就是 x2,x3 就是 x3。首先,我需要检查 x1、x2 和 x3 之间是否有 x。如果它们之间有一个 x,我需要 x 的值。而已。我该怎么做?

x x1 x x2 x3 x

P.Sx1、x2、x3之间可以有1个以上的x,左右也可以有1个以上的x。

preg_match_all('/x1\s+(.+?)\s+x2\s+(.+?)\s+x3/i', $string, $matches);

会将您想要的内容放入 $matches[1](x1 和 x2 之间的匹配项)和 $matches[2](x2 和 x3 之间的匹配项)。正则表达式搜索所有出现的 x1,然后是空格,其他内容,空格,然后是 x2,另一个 whitespace-anything-whitespace-sequence,最后是 x3。

如果您希望中间的字符串作为单独的单词,您可以对它们执行 preg_split('/\s/', ...)。上面的正则表达式也可以适应它,但这会使检索更加复杂。

示例:

<?php

$string = 'The quick brown fox jumps over the lazy dog';
preg_match_all('/quick\s+(.+?)\s+fox\s+(.+?)\s+lazy/', $string, $matches);
var_dump($matches);

?>

产量

array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(35) "quick brown fox jumps over the lazy"
  }
  [1]=>
  array(1) {
    [0]=>
    string(5) "brown"
  }
  [2]=>
  array(1) {
    [0]=>
    string(14) "jumps over the"
  }
}

恕我直言,这是正确的结果。

如你所见,$matches[1][0]包含quick(或x1)和fox(或x2)之间的词,$matches[2][0]包含fox(或x2)之间的词x2) 和惰性 (或 x3)。如果找到更多的出现,它们将存储在 $matches[1][1] 和 $matches[2][1] 下,依此类推,计算第二个索引。遍历 $matches[0] 的索引就足够了,因为所有结果集都将包含完整匹配和两个部分匹配。