在其他单词之间找到单词

时间:2015-08-25 15:00:17

标签: php regex string contain

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

x x1 x x2 x3 x

P.S在x1,x2和x3之间可以有超过1 x,并且左右可以超过1 x。

1 个答案:

答案 0 :(得分:1)

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

将您想要的内容放入$ matches [1](x1和x2之间的匹配)和$ matches [2](x2和x3之间的匹配)。正则表达式搜索x1的所有出现,后跟空格,其他内容,空白,然后是x2,另一个是空白 - 任何 - 空白 - 序列,最后是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)之间的单词和懒惰(或x3)。如果发现更多的出现,它们将存储在$ matches [1] [1]和$ matches [2] [1]之下,依此类推,计算第二个索引。迭代$ matches [0]的索引就足够了,因为所有结果集都将包含完整匹配和两个部分匹配。