Регулярное выражение: синтаксический анализ после 16 вхождений символа?

#php #regex #character #explode

#php #регулярное выражение #символ #взорваться

Вопрос:

/* Отредактировано, чтобы иметь смысл! */

У меня 900 строк этого:

 ;745;ref;name;Adress;zipcode;;mobphone;;;;;;;;;
  

я хочу 900 строк этого:

 array(
  '',
  745,
  'ref',
  'name',
  'adress',
  'zipcode',
  '',
  'mobphone'
  etc..
)
  

Некоторые строки, похоже, объединены в одну, поэтому получается одна длинная вместо двух коротких. Мне нужно использовать функцию PHP split () для разделения строк после каждого 16-го символа с запятой, вот с чем мне нужна ваша помощь.

Комментарии:

1. @querty: Пожалуйста, точно опишите ввод и вывод в строке. Вы ожидаете получить массив [(empty), 745, ref, name, Adress, zipcode, (empty), mobphone, (empty), (empty),...] ?

Ответ №1:

Я не знаю, поможет ли это вам, но PHP уже содержит функциональность, которая позволяет вам анализировать CSV-файл. fgetcsv() Функция будет читать CSV-файл построчно. Возвращает массив, содержащий значения каждого поля в текущей строке.

В вашем случае вам нужно было бы указать ему использовать точку с запятой вместо запятой в качестве разделителя поля.

 $fp = fopen('file.csv', 'r');
while ($line = fgetcsv($fp, 0, ';')){
  $firstField = $line[0];
  $secondField = $line[1];
  //...
}
  

Комментарии:

1. @qwerty На самом деле, я думаю, это именно то, что вы ищете. Я был ленив и не прочитал весь вопрос — я просто увидел «CSV» и «split()» и подумал, что могу предложить вам «fgetcsv()».

2. Хаха, ну ты был прав! Я ожидал ту же ошибку, но это действительно сработало! Намного надежнее, чем использование split() или explode(). Спасибо!

Ответ №2:

Взгляните на explode:http://php.net/manual/en/function.explode.php

Комментарии:

1. Я использовал explode () раньше и анализировал его при каждом переносе строки, но это работало не так, как ожидалось. Мне нужно использовать split (), но мне нужна помощь с регулярным выражением..