CHAPTER 9 – REGULAR EXPRESSIONS – Splitting Strings

T h e l a s t g r o u p o f f u n c t i o n s i n c l u d e s o n l y preg_split(), which can be used to split a string into substrings by using a reg- ular expression match for the delimiters. PHP provides an explode() function that also splits strings, but explode() can only use a simple string as the delim- iter. explode() is much faster than using a regular expression, so you might be better off using explode() when possible. A simple example of preg_splits()'s usage might be to split a string into the words it contains. See the following example: <?php $str = 'This is an example for preg_split().'; $words = preg_split('@[W]+@', $str); print_r($words); ?> The script outputs Array ( [0] => This [1] => is [2] => an [3] => example [4] => for [5] => preg_split [6] => ) As you can see, the last element is empty. By default, the function returns empty elements, too. The character(s) before the end of the string are non-word characters so they act as a delimiter, resulting in an empty element. You can pass two more parameters to the preg_split() function: a limit and a flag. The "limit" parameter controls how many elements are returned before the splitting stops. In the preg_split() example, two elements are returned: <?php $str = 'This is an example for preg_split().'; $words = preg_split('@[W]+@', $str, 2); print_r($words); ?> The output is Array ( [0] => This [1] => is an example for preg_split(). ) In the next example, we use -1 as the limit. -1 means that there is no limit at all, and allows us to pass flags without shortening our output array. Three flags specify what is returned: PREG_SPLIT_NO_EMPTY. Prevents empty elements from ending up in the returned array: <?php $str = 'This is an example.'; $words = preg_split('@[W]+@', $str, -1, PREG_SPLIT_NO_EMPTY); print_r($words); ?> The script outputs Array ( [0] => This [1] => is [2] => an [3] => example ) PREG_SPLIT_DELIM_CAPTURE. Returns the delimiters itself, but only if the delimiters are surrounded by parentheses. We combine the flag with PREG_SPLIT_NO_EMPTY: <?php $str = 'This is an example.'; $words = preg_split( '@([W]+)@', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY ); print_r($words); ?> The script outputs Array ( [0] => This [1] => [2] => is [3] => [4] => an [5] => [6] => example [7] => . ) PREG_SPLIT_OFFSET_CAPTURE. Specifies that the function return a two- dimensional array containing both the text and the offset in the string where the element started. In this example, we combine all three flags: <?php $str = 'This is an example.'; $words = preg_split( '@([W]+)@', $str, -1, PREG_SPLIT_OFFSET_CAPTURE | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY ); var_export($words); ?> The script outputs (reformatted): array ( 0 => array ( 0 => 'This', 1 => 0 ), 1 => array ( 0 => ' ', 1 => 4 ), 2 => array ( 0 => 'is', 1 => 5 ), 3 => array ( 0 => ' ', 1 => 7 ), 4 => array ( 0 => 'an', 1 => 8 ), 5 => array ( 0 => ' ', 1 => 10 ), 6 => array ( 0 => 'example', 1 => 11 ), 7 => array ( 0 => '.', 1 => 18 ), )

Post Comment
Login to post comments