Я использую preg_split следующим образом:
<?php
$num = 99.14;
$pat = "[^a-zA-Z0-9]";
$segments = preg_split($pat, $num);
print_r($segments);
Я ожидал, что $ сегменты будут массивом, подобным array(99,14)
array(99.14)
array(99,14)
Однако он возвращает array(99.14)
Я не знаю, почему preg_split делает это, в то время как шаблон, которым он должен разделить строку, является любым специальным символом, т.е. не буквенно-цифровым,
Проверьте это демо: http://codepad.org/MUusnwis
Вы должны добавить разделители в свое регулярное выражение следующим образом:
<?php
$num = 99.14;
$pat = "/[^a-zA-Z0-9]/";
//^------------^Delmimiter here
$segments = preg_split($pat, $num);
print_r($segments);
?>
Вывод:
Array ( [0] => 99 [1] => 14 )
РЕДАКТИРОВАТЬ:
Вопрос, почему OP получил всю строку в массиве, прост! Если вы читаете руководство здесь: http://php.net/manual/en/function.preg-split.php
И сделайте короткую цитату оттуда по примечаниям:
Совет Если совпадение не выполняется, возвращается массив с одним элементом, содержащим входную строку.
Вы также можете использовать инструмент T-Regx, и у вас не будет таких проблем :)
Разделители не требуются
<?php
$num = 99.14;
$pat = "[^a-zA-Z0-9]"; // no delimiters :)
$segments = pattern($pat)->split($num);
print_r($segments);
Если вы хотите разделить по десятичной форме, вы также можете использовать:
$array = explode('.', $num);
preg_split
покрывал любые варианты локальных настроек. это может быть 99,14 тоже!
/
хотя? Я немного озадачен этим.