В настоящее время я взорву строку .
и он работает, как мне нравится. единственная проблема – это также взрывается, когда .
происходит как десятичная точка. Есть ли способ исключить 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 )