preg_split() and explode() in PHP

By: Andi, Stig and Derick  

preg_split() can be used to split a string into substrings by using a regular expression match for the delimiters. PHP provides an explode() function that also splits strings, but explode() can only use a simple string as the delimiter. 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][email protected]', $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][email protected]', $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][email protected]', $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 ),

)




Archived Comments

1. Shawncob
View Tutorial          By: Shawncob at 2017-08-29 14:57:37

2. EddieJeope
View Tutorial          By: EddieJeope at 2017-05-03 11:56:00

3. Bryananime
View Tutorial          By: Bryananime at 2017-05-03 11:23:35

4. Why you are not using / / inted of @/[\w]/@??

like; $rawMSG = preg_split("/ /&qu

View Tutorial          By: Hyder at 2013-06-28 17:21:31

5. thank you for this quick and easy demonstration. But your regular expression didn't work for me. Ins
View Tutorial          By: rajesh at 2012-09-20 17:48:17

6. Thank you
View Tutorial          By: vbulletincoder at 2011-09-13 13:16:40

7. Finally! You enlighted me in a small problem: it was not returning the delimiters.
PHP's manu

View Tutorial          By: Fernando Martin at 2011-02-25 12:54:58

8. Awesome post : exactly what I was looking for !!
I will try that golden piece of code for my

View Tutorial          By: Mike at 2010-12-06 02:23:44


Most Viewed Articles (in PHP )

PHP code to write to a CSV file for Microsoft Applications

Different versions of PHP - History and evolution of PHP

unset() and empty() functions in PHP

Exception in module wampmanager.exe at 000F15A0 in Windows 8

Warning: session_start(): open .... failed - PHP error

PHP ./configure RESULTING IN [email protected]_2_2_3_... AND UNRESOLVED REFERENCES WITH ORACLE OCI8

PHP 5.1.4 INSTALLATION on Solaris 9 (Sparc)

Building PHP 5.x with Apache2 on SuSE Professional 9.1/9.2

Installing PHP 5.x with Apache 2.x on HP UX 11i and configuring PHP 5.x with Oracle 9i

Cannot load /usr/local/apache/libexec/libphp4.so into server: ld.so.1:......

Setting up PHP in Windows 2003 Server IIS7, and WinXP 64

error: "Service Unavailable" after installing PHP to a Windows XP x64 Pro

Running different websites on different versions of PHP in Windows 2003 & IIS6 platform

Function to return number of digits of an integer in PHP

Function to sort array by elements and count of element in PHP

Latest Articles (in PHP)

Comment on this tutorial