I have the following operation which splits a string whenever it encounters an alphabet:
$splitOriginal = preg_split("/[a-zA-Z]/", implode('', array_slice($array, $key)), 2);
I want to extend it in such a way that it splits the string whenever the variable encountered is NOT a number, bracket, plus sign, hyphen, newline or tab.
I have written a regex which can match the above:
preg_match('/^(?=.*[0-9])[- +()0-9rnt]+$/', $value)
But I need to negate it, to match whenever the value being compared is NOT it. Would really appreciate any prompt help I can get.
Thank you.
Advertisement
Answer
The [a-zA-Z]
pattern matches any ASCII letter. Any char “NOT a number, bracket, plus sign, hyphen, newline or tab” can also be a letter, so you should focus on the latter requirement, your former pattern is no longer relevant.
You should keep using preg_split
:
$splitOriginal = preg_split('/[^d()+nt-]/', implode('', array_slice($array, $key)), 2);
The [^d()+nt-]
pattern matches exactly what you formulated. Pay attention at the hyphen, when it is at the end (or start) of the character class, it can go unescaped.