skyline26 skyline26 - 4 months ago 47
PHP Question

preg_split how to include the split delimiter in results?

I have this simple pattern that splits a text into periods

$text = preg_split("/[\.:!\?]+/", $text);


but i want to include . : or ! at the end of array items

IE now for "good:news.everyone!" i have:

array("good","news","everyone","");


but what i want is:

array("good:","news.","everyone!","");

Answer

Here you go:

preg_split('/([^.:!?]+[.:!?]+)/', 'good:news.everyone!', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

How it works: The pattern actually turns everything into a delimiter. Then, to include these delimiters in the array, you can use the PREG_SPLIT_DELIM_CAPTURE constant. This will return an array like:

array (
    0 => '',
    1 => 'good:',
    2 => '',
    3 => 'news.',
    4 => '',
    5 => 'everyone!',
    6 => '',
);

To get rid of the empty values, use PREG_SPLIT_NO_EMPTY. To combine two or more of these constants, we use the bitwise | operator. The result:

array (
    0 => 'good:',
    1 => 'news.',
    2 => 'everyone!'
);
Comments