Как получить (в PHP) все подстроки, в которых описывается регулярное выражение? - PullRequest
2 голосов
/ 14 февраля 2011

Я создаю регулярное выражение в виде: A |Б |C ... автоматически, по программе, где A, B, C, ... - постоянные строки.

Мне нужно найти все совпадения, которые соответствуют этим регулярнымвыражение, даже если A, B, C, ... имеют непустое пересечение , или кто-то является подстрокой другого.

Пример:

preg_match_all ('/Hello World|Hello|World lo/i', 'xxxHello worldxxx', $m, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); 
var_export ($m);

Это дает:

array (
   0 =>
   array (
     0 =>
     array (
       0 => 'Hello World'
       1 => 3, // start of match
     )
   )
)

Мне понадобится:

array (
   0 =>
   array (
     0 =>
     array (
       0 => 'Hello World'
       1 => 3, // start of match
     )
     1 =>
     array (
       0 => 'Hello'
       1 => 3, // start of match
     )
     2 =>
     array (
       0 => 'lo world'
       1 => 6, // start of match
     )
   )
)

Есть ли способ получить его?

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 февраля 2011

Запустите preg_match_all для каждого выражения.

0 голосов
/ 14 февраля 2011

Я бы использовал strpos:

$str = 'xxxHello worldxxx';
$arr = array('Hello World', 'Hello', 'World');
foreach($arr as $word) {
    $pos = strpos(strtolower($str), strtolower($word));
    echo "$word found at char $pos\n";
}

вывод:

Hello World found at char 3
Hello found at char 3
World found at char 9
...