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

0

Я использую 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

Теги:
preg-split

3 ответа

4
Лучший ответ

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

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

И сделайте короткую цитату оттуда по примечаниям:

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

  • 1
    Я отправил то же самое, но удалил его, увидев ваш ответ. Но почему он возвращает всю строку без / хотя? Я немного озадачен этим.
  • 0
    Я думаю, что это связано со спецификациями движка регулярных выражений PHP
Показать ещё 1 комментарий
0

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

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

<?php
$num = 99.14;
$pat = "[^a-zA-Z0-9]";  // no delimiters :)
$segments = pattern($pat)->split($num);
print_r($segments);
0

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

$array = explode('.', $num);
  • 0
    Я хочу, чтобы preg_split покрывал любые варианты локальных настроек. это может быть 99,14 тоже!
  • 0
    Вы можете получить это из PHP - см. Us2.php.net/manual/en/function.localeconv.php . Конечно, вам нужно будет получить локаль, так что ваше оригинальное решение, вероятно, будет более надежным.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню