我有一个不同长度的单词。下面句子中的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。
答案 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]的索引就足够了,因为所有结果集都将包含完整匹配和两个部分匹配。