preg_split неожиданное поведение

я использую 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) Я не знаю, почему preg_split делает это, в то время как шаблон, по которому он должен разбивать строку, является любым специальным символом, то есть не алфавитно-цифровым.

Проверьте это демо: http://codepad.org/MUusnwis

0

Решение

Вы должны добавить разделители к своему регулярному выражению следующим образом:

<?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

И возьмите быструю цитату оттуда под примечаниями:

Совет
Если сопоставление не удалось, будет возвращен массив с единственным элементом, содержащим входную строку.

4

Другие решения

Если вы хотите разделить только по десятичной дроби, вы также можете использовать:

$array = explode('.', $num);
0

Вы также можете использовать Инструмент T-Regx и таких проблем не будет 🙂

Разделители не требуются

<?php
$num = 99.14;
$pat = "[^a-zA-Z0-9]";  // no delimiters :)
$segments = pattern($pat)->split($num);
print_r($segments);
0
По вопросам рекламы [email protected]