Как перейти со split на preg_split

Тема в разделе "Как сделать...", создана пользователем caesar-deluxe, 2 сен 2013.

  1. caesar-deluxe

    caesar-deluxe Постоялец

    Регистр.:
    22 авг 2012
    Сообщения:
    60
    Симпатии:
    12
    Появляется сообщение об ошибке - Deprecated: Function split() is deprecated in common/classes/class_Parser.lib.php on line 149
    Вот кусок кода:

    147: public function extractPhpdoc($paragraph)
    148: {
    149: $lines = split($this->PHP_BASE["break"], $paragraph);
    150: $phpdoc = "";
    151: reset($lines);
    152: while(list($k, $line) = each($lines))
    153: {
    154: $line = trim($line);
    155: if (""==$line)
    156: continue;
    157: if ("*" == $line[0])
    158: $phpdoc.= trim(substr($line, 1))."\n";
    159: else
    160: $phpdoc.= $line."\n";
    161: }
    162: return substr($phpdoc, 0, -1);
    163: }

    Пробовал привести строку 149 к виду:
    $lines =preg_split($this->PHP_BASE/["break"]/, $paragraph); - не работает
    $lines =preg_split($this->PHP_BASE[/"break"/], $paragraph); - не работает

    Кто нибудь знает как бороться с этими граблями?
     
  2. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    608
    Симпатии:
    479
    Так должно работать:
    PHP:
    $lines preg_split('/'.$this->PHP_BASE["break"].'/'$paragraph);
     
    caesar-deluxe нравится это.
  3. caesar-deluxe

    caesar-deluxe Постоялец

    Регистр.:
    22 авг 2012
    Сообщения:
    60
    Симпатии:
    12
    Работает, но с небольшим багом:
    строку вида
    $LANG['text_alarm'] = 'Alarm';
    приводит к виду
    $LANG['text_alarm'] = 'Alarm'
    то есть обрезает ; в конце строки
     
    Последнее редактирование: 3 сен 2013
  4. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    Есть "читерство" - explode вместо split использовать.
     
  5. caesar-deluxe

    caesar-deluxe Постоялец

    Регистр.:
    22 авг 2012
    Сообщения:
    60
    Симпатии:
    12
    Тогда попробуй в строке
    list($year, $month, $day, $hrs, $min, $sec) = split('[ \:- ]', $date);
    "explode вместо split использовать" и получишь новые грабли.
    только preg_split выручит в этой ситуации, вот так:
    list($year, $month, $day, $hrs, $min, $sec) = preg_split('/[: -]/', $date);

    Ох уж эти "читеры"
     
  6. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    caesar-deluxe, вообще для такого специально есть http://www.php.net/manual/ru/function.date-parse.php

    А explode имеет смысл использовать там, где в качестве разделителя может быть один вариант (символ или строка из нескольких символов) - такое встречается довольно часто. Естественно, что для разбивки по регулярному выражению эта функция не подойдёт.

    p.s. регулярки в разделителях мне встречались как правило в сочетании с функцией preg_split, а в обычном split почти всегда стоял 1 символ ('|', ':')
     
    Последнее редактирование: 3 сен 2013