2011-01-15 3 views
0

Я хочу разбить следующую строку запятой.Регулярное выражение для разделения этой строки

1,"x1",43,"tr","y,7" 

Результирующий массив должен быть следующим.

0=>1 
1=>"x1" 
2=>43 
3=>"tr" 
4=>"y,7" 

Короче говоря, он не должен рассматривать запятую, если она находится между кавычками.

Если я использую взрыв, я получу следующий результат, который я не хочу.

[4:58:20 PM] Mihir Dhandha: 0=>1 
1=>"x1" 
2=>43 
3=>"tr" 
4=>"y 
5=>7" 

Я застрял здесь, пожалуйста, помогите.

ответ

1

Легко !! Ваша строка CSV.

Использование $your_array=str_getcsv($your_string);

+0

Ты сделал мой день ... Я кодер .net, поэтому я боролся с этой небольшой проблемой php. Вы сделали это легко, как ничего :) – Mihir

+0

Я не понимаю, почему кто-то проверил мой ответ как «неприемлемость». Я думаю, что все в порядке. Хорошо, проблема в моем плохом английском ??? ;) – Curlas

2

Следующий фрагмент кода:

$s = '1,"x1",43,"tr","y,7"'; 
print_r(preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $s)); 

производит:

Array 
(
    [0] => 1 
    [1] => "x1" 
    [2] => 43 
    [3] => "tr" 
    [4] => "y,7" 
) 

, как можно видеть на ideone.

Регулярное выражение ,(?=([^"]*"[^"]*")*[^"]*$) означает: соответствует запятой, только если оно имеет нуль или четное число двойных кавычек перед ним.

+0

Предполагая, что строка читается слева направо, если это проверка для четного числа двойных кавычек позади, а не впереди? –

+0

@ Rob Young, неважно, смотрите ли вы вперед или сзади. Обратите внимание, что многие реализации регулярных выражений не поддерживают внешний вид, который не имеет очевидной длины, поэтому смотреть вперёд - это «безопасный» способ, в данном случае. (или даже безопаснее, используйте встроенную функцию CSV, как и другие) –

3

Попробуйте str_getcsv:

<?php 

$s = '1,"x1",43,"tr","y,7"'; 
$result = str_getcsv($s); 
var_dump($result); 
echo "\n"; 

// array(5) { 
// [0]=> 
// string(1) "1" 
// [1]=> 
// string(2) "x1" 
// [2]=> 
// string(2) "43" 
// [3]=> 
// string(2) "tr" 
// [4]=> 
// string(3) "y,7" 
// } 


?> 
+0

Ударьте меня на это. Примечание: он работает только с 5.3 и выше, но комментарии имеют обходное решение для более старых версий. – Maerlyn

Смежные вопросы