I’m trying to split a string by non-alphanumeric delimiting characters AND between alternations of digits and non-digits. The end result should be a flat array of consisting of alphabetic strings and numeric strings.
I’m working in PHP, and would like to use REGEX.
Examples:
ES-3810/24MX
should become['ES', '3810', '24', 'MX']
CISCO1538M
should become['CISCO' , '1538', 'M']
The input file sequence can be indifferently DIGITS or ALPHA.
The separators can be non-ALPHA and non-DIGIT chars, as well as a change between a DIGIT sequence to an APLHA sequence, and vice versa.
Advertisement
Answer
The command to match all occurrances of a regex is preg_match_all()
which outputs a multidimensional array of results. The regex is very simple… any digit ([0-9]
) one or more times (+
) or (|
) any letter ([A-z]
) one or more times (+
). Note the capital A
and lowercase z
to include all upper and lowercase letters.
The textarea and php tags are inluded for convenience, so you can drop into your php file and see the results.
<textarea style="width:400px; height:400px;"> <?php foreach( array( "ES-3810/24MX", "CISCO1538M", "123ABC-ThatsHowEasy" ) as $string ){ // get all matches into an array preg_match_all("/[0-9]+|[[:upper:][:lower:]]+/",$string,$matches); // it is the 0th match that you are interested in... print_r( $matches[0] ); } ?> </textarea>
Which outputs in the textarea:
Array ( [0] => ES [1] => 3810 [2] => 24 [3] => MX ) Array ( [0] => CISCO [1] => 1538 [2] => M ) Array ( [0] => 123 [1] => ABC [2] => ThatsHowEasy )