В настоящее время я взорву строку . и он работает, как мне нравится. единственная проблема – это также взрывается, когда . происходит как десятичная точка. Есть ли способ исключить decimal точки из функции взрыва?
Моя текущая настройка: как вы видите, она взрывается . между двумя числами
$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 [3] => 9 is a number )
Вы можете использовать preg_split для этого с регулярным выражением /(?<!\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); ?>
Выход :
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
Что означает регулярное выражение?
(?<!\d) – «отрицательный lookbehind» означает, что он будет соответствовать только если нет цифры ( \d ) перед точкой \. – буквальный . персонаж. Его нужно избегать . в regex означает «любой символ», (?!\d) – «отрицательный взгляд», означающий, что он будет соответствовать только если нет цифры ( \d ) после точки Дополнительно:
Вы можете избавиться от пробелов, используя регулярное выражение как /(?<!\d)\.(?!\d)\s*/ , которое также будет соответствовать любому количеству белых пробелов после точки, или, альтернативно, вы можете используйте $NewString = array_map('trim', $NewString); ,
Если вам нужно взорвать текст, как в вашем примере, простой способ сделать это – взорвать «.» Вместо «.».
$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 )