PHP: preg_split - PullRequest
       19

PHP: preg_split

1 голос
/ 23 июля 2010

Мне нужна помощь по регулярному выражению здесь.

Я хочу, чтобы PHP мог разбивать строку на секции массивов так, чтобы подстрока, заключенная в <% me%>, находилась в своем собственном слоте.

Так, например,

Hi there how are <%me date(); %> => {"Hi there how are ", "<%me date(); %>} 
Hi there how are you<%me date(); %> => {"Hi there how are you", "<%me date(); %>}
Hi there how are you<%me date(); %>goood => {"Hi there how are you", "<%me date(); %>, "good"
Hi there how are you<%me date(); %> good => {"Hi there how are you", "<%me date(); %>}, " good"}

Обратите внимание, что пробел не помешает анализу тегов.

1 Ответ

3 голосов
/ 23 июля 2010

При захвате разделителя в PREG

Вы можете использовать PREG_SPLIT_DELIM_CAPTURE для разделения и захвата разделителя.

Не забудьте поместить разделитель в группу захвата (…) для правильной работы.

Вот пример:

$text = 'abc123xyz456pqr';

$parts = preg_split('/(\d+)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

print_r($parts);

Это печатает ( как видно на ideone.com ):

Array
(
    [0] => abc
    [1] => 123
    [2] => xyz
    [3] => 456
    [4] => pqr
)

Ссылки


Вернуться к вопросу

В этом случае вы можете попробовать шаблон разделителя (<%me[^%]+%>). То есть:

  • <%me, буквально
  • [^%]+, т. Е. Все, кроме %
  • %>, буквально
  • Все это захвачено в группе 1

Если в теге может появиться %, вы можете попробовать что-то вроде (<%me.*?%>).

Вот пример:

$text = 'prefix<%me date() %>suffix';

$parts = preg_split('/(<%me[^%]+%>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

print_r($parts);

Приведенные выше отпечатки ( как видно на ideone.com ):

Array
(
    [0] => prefix
    [1] => <%me date() %>
    [2] => suffix
)

Похожие вопросы

...