Регулярка намного намного дольше будет работать чем автомат (а тут и нужен то несложный)
пруф
Форум → Программирование → PHP для идиотов → Regexp. CSV
Страницы: ← Предыдущая страница • Следующая страница →
16 октября 2010 г. 17:20, спустя 14 минут 53 секунды
Регулярка намного намного дольше будет работать чем автомат (а тут и нужен то несложный)
16 октября 2010 г. 17:25, спустя 4 минуты 55 секунд
16 октября 2010 г. 17:32, спустя 6 минут 56 секунд
16 октября 2010 г. 17:38, спустя 6 минут 14 секунд
Откуда вы это понимаете и почему конечный автомат на интерпретируемом языке будет быстрее?
16 октября 2010 г. 18:06, спустя 27 минут 22 секунды
будет работать быстрее?
16 октября 2010 г. 18:11, спустя 5 минут 9 секунд
16 октября 2010 г. 18:10, спустя 23 часа 59 минут 24 секунды
16 октября 2010 г. 19:01, спустя 51 минуту 4 секунды
<?php
error_reporting(-1);
$line = '12,"153"",2",3,4,23,6';
$csv_regex = '{
\G(?:^|\s*,\s*)
(?:
# Поле в кавычках…
" # открывающая кавычка
( [^"]*+ (?: "" [^"]*+ )*+ )
" # закрывающая кавычка
| # …или…
# …произвольный текст, кроме кавычек и запятых…
( [^",]*[^",\s] )
)
}x';
header('Content-type: text/plain');
/* Применить регулярное выражение, заполнить $all_matches всеми типами данных
*/
preg_match_all($csv_regex, $line, $all_matches);
/* В $Result будут храниться поля, которые мы извлечем из $all_matches */
$Result = array ();
/* Обойти все успешные совпадения… */
for ($i = 0; $i < count($all_matches[0]); $i++)
{
/* Если это совпадение со второй парой сохраняющих скобок - использовать
* значение как есть */
if (strlen($all_matches[2][$i]) > 0)
array_push($Result, $all_matches[2][$i]);
else
{
/* Если это значение в кавычках, предварительно заменить
* последовательности из двух кавычек одной кавычкой */
array_push($Result, preg_replace('/""/', '"', $all_matches[1][$i]));
}
}
/* Теперь массив $Result заполнен и готов к дальнейшему использованию */
var_export($Result);
16 октября 2010 г. 19:03, спустя 2 минуты 16 секунд
может всё-таки с регуляркой немного потанцуем?
16 октября 2010 г. 19:25, спустя 21 минуту 44 секунды
$csv_regex = '{
\G(?:^|,)
(?:\s*+)
(?:
# Поле в кавычках…
" # открывающая кавычка
( [^"]*+ (?: "" [^"]*+ )*+ )
" # закрывающая кавычка
| # …или…
# …произвольный текст, кроме кавычек и запятых…
( [^",\s]*+ )
)
(?:\s*+)
}x';
[/php] Спустя 81 сек. [b]phpdude[/b], всё она сожрёт. надо только правильно написать
16 октября 2010 г. 19:34, спустя 8 минут 48 секунд
16 октября 2010 г. 19:43, спустя 8 минут 54 секунды
16 октября 2010 г. 20:45, спустя 1 час 2 минуты 2 секунды
16 октября 2010 г. 20:55, спустя 10 минут 23 секунды
16 октября 2010 г. 22:31, спустя 1 час 36 минут 7 секунд
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!