Currently I am exploding a string at .
and it works as I like. the only issue is that is also explodes when the .
occurs as a decimal point. Is there a
You can use preg_split for this with the regex of /(?<!\d)\.(?!\d)/
:
<?php
$String = "This is a string. It will split at the previous point and the next one. Here 7.9 is a number";
$NewString = preg_split('/(?<!\d)\.(?!\d)/', $String);
print_r($NewString);
?>
Output:
Array
(
[0] => This is a string
[1] => It will split at the previous point and the next one
[2] => Here 7.9 is a number
)
DEMO
What does the regex mean?
(?<!\d)
- a "negative lookbehind" meaning it will only match if there is NO digit (\d
) before the dot\.
- a literal .
character. It needs to be escaped as .
in regex means "any character"(?!\d)
- a "negative lookahead" meaning it will only match if there is NO digit (\d
) after the dotExtra:
You can get rid of the spaces by using a regex as /(?<!\d)\.(?!\d)\s*/
that will also match any number of white-spaces after the dot, or alternatively you can use $NewString = array_map('trim', $NewString);
.
If need to explode text like in your example, an easy way to do it is to explode ". " instead of ".".
$String = "This is a string. It will split at the previous point and the next one. Here 7.9 is a number";
$NewString = explode('. ', $String);
print_r($NewString);
output
Array (
[0] => This is a string
[1] => It will split at the previous point and the next one
[2] => Here 7.9 is a number
)