regex — поиск иголки в стоге сена не работает, когда он окружен похожими стогами сена

Кто-нибудь знает, как изменить скребок ниже для достижения желаемого результата:

Array ( [0] => Gold_Needle [1] => Silver_Needle )

Код можно запустить онлайн @ http://ideone.com/QATj5a

Результат:

Array ( [0] => this is a bunch of hay hay1= Gold_Needle [1] => Silver_Needle )

Желаемый Результат:

Array ( [0] => Gold_Needle [1] => Silver_Needle )

0

Решение

использование $starts а также $ends массив для построения регулярного выражения вида вот так:

(hay1=\h*\K(?:.(?!hay1))*?(?= hay=Gold))|(hay2=\h*\K(?:.(?!hay2))*?(?= hay=Silver))

Код:

$haystack='Data set 1: hay2= this is a bunch of hay  hay1= Gold_Needle hay=Gold
Data Set 2: hay2=Silver_Needle hay=Silver';

$needle1_Begin='hay1=';
$needle2_Begin='hay2=';

$needle1_End='hay=Gold';
$needle2_End='hay=Silver';

$starts = array($needle1_Begin,$needle2_Begin);
$ends = array($needle1_End,$needle2_End);

$re = array_reduce($starts, function($res, $e) use (&$ends) {
$res .= '(' . $e . '\h*\K(?:.(?!' . $e . '))*?(?= ' . current($ends) . '))|';
next($ends); return $res;} );

$re = '/' . substr($re, 0, -1) . '/';

if (preg_match_all($re, $haystack, $m))
print_r($m[0]);

выход:

Array
(
[0] => Gold_Needle
[1] => Silver_Needle
)
1

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

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

По вопросам рекламы [email protected]