Нахождение слов между другими словами

У меня есть предложение с различной длиной слов. Символ x в предложении ниже представляет случайные слова, а x1, x2 и x3 представляют фиксированные слова — слова, которые не меняются. По сути, x1 — это x1, x2 — это x2, а x3 — это x3. Во-первых, мне нужно проверить, есть ли х между х1, х2 и х3. Если между ними есть х, мне нужно значение х. Вот и все. Как бы я это сделал?

x x1 x x2 x3 x

P.S Может быть больше чем 1 x между x1, x2 и x3, а также может быть больше чем 1 x слева и справа.

0

Решение

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

поместит желаемый контент в $ match [1] (совпадения между x1 и x2) и $ match [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"}
}

ИМХО правильный результат.

Как вы можете видеть, $ match [1] [0] содержит слова между fast (или x1) и fox (или x2), а $ match [2] [0] содержит слова между fox (или x2) и lazy ( или х3). Если найдены другие случаи, они будут храниться в $ match [1] [1] и $ match [2] [1] и т. Д., Считая второй индекс. Достаточно будет перебрать индексы $ match [0], так как все наборы результатов будут содержать полное совпадение и два частичных совпадения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector