Не могли бы вы помочь мне найти синтаксис preg_replace, чтобы я мог дублировать цену там, где она отсутствует? Тема:
...nomaterwhat13124123,"321,00",,nomaterwhat
...nomaterwhat12321,"322,20","134,00",nomaterwhat
...nomaterwhat1321,"211,00",,nomaterwhat
...nomaterwhat31313,"241,00",,nomaterwhat
Мой результат должен быть:
...nomaterwhat13124123,"321,00","321,00",nomaterwhat
...nomaterwhat12321,"322,20","134,00",nomaterwhat
...nomaterwhat1321,"211,00","211,00",nomaterwhat
...nomaterwhat31313,"241,00","241,00",nomaterwhat
Я пытался
preg_replace("(\W+),,nomaterwhat$", "$1,$1,nomaterwhat", $string);
Игнорируя более сложные случаи, это должно делать:
$result = preg_replace('/,"(\d+,\d{2})",,nomaterwhat/', ',"$1",$1,nomaterwhat', $string);
,"144,00",,nomaterwhat
: S Это выглядит так же ... Странно
Если вы используете str_getcsv, вы можете сделать что-то вроде этого:
$data = "CSV VALUES";
$lines = explode("\n", $data);
foreach ($lines as $line) {
$temp = str_getcsv($line);
echo '<pre>' . print_r($temp, true) . '</pre>';
}
Затем вы можете поместить их в массив следующим образом:
$data = "CSV VALUES";
$lines = explode("\n", $data);
$output = array();
foreach ($lines as $line) {
$temp = str_getcsv($line);
$temp[5] = ($temp[5] == '') ? $temp[4] : $temp[5];
$output[] = $temp;
}
echo '<pre>' . print_r($output, true) . '</pre>';
Замените $temp[5]
местом, где должна быть 2-я цена.
У вас есть несколько проблем с вашим регулярным выражением.
1. Без разделителя
2. Нет модификатора m
, поэтому $
- это конец строки, а не строка.
3. \W+
- это не az
, 0-9
и/или _
поэтому вы все равно не получили бы денежную стоимость.
Попробуйте это:
$string = '...nomaterwhat13124123,"321,00",,nomaterwhat
...nomaterwhat12321,"322,20","134,00",nomaterwhat
...nomaterwhat1321,"211,00",,nomaterwhat
...nomaterwhat31313,"241,00",,nomaterwhat';
echo preg_replace("/,(\"\d+,\d{2}\"),,nomaterwhat$/m", ",$1,$1,nomaterwhat", $string);
Вывод:
...nomaterwhat13124123,"321,00","321,00",nomaterwhat
...nomaterwhat12321,"322,20","134,00",nomaterwhat
...nomaterwhat1321,"211,00","211,00",nomaterwhat
...nomaterwhat31313,"241,00","241,00",nomaterwhat
Демо-версия Regex: https://regex101.com/r/hE2zQ7/1
PHP Demo: http://ideone.com/OanPN1