function test_price_min(){
$post = '
Текстиль
32-37/8
975₽
';
$result_match = preg_match('/Цена\d{1,6}[рр₽][^aак]|Цена\d{1,6}[^aак]|[^-р]\d{1,6}[рр₽][^aак]|ц\d{1,6}[^в]/ui', $post, $matches_gross);
if ($result_match == true) {
echo '<pre>';
print_r($matches_gross);
echo '</pre><br>';
}
}
test_price_min();
foreach ($wp_query->posts as $post) {
$post_content_filtered = json_decode($post->post_content_filtered,'true',512); // десериализовали общий массив
// удаляем все точки (некоторые цены отделяют точками)
$matches_gross = mb_ereg_replace('\.', ' ', $post_content_filtered['dop_text_post']['detail_post_text']);
// удаляем все двоеточия (некоторые перед ценой ставят двоеточия)
$matches_gross = mb_ereg_replace(':', ' ', $matches_gross);
// заменяем все звездочки на бкву х
$matches_gross = mb_ereg_replace('\*', 'х', $matches_gross);
// удаляем все пробелы (включая табуляцию и концы строк)
$matches_gross = preg_replace('/\s+/', '', $matches_gross);
// смотрим очищенный текст
echo '<pre>'; print_r($matches_gross); echo '</pre><br>';
// пробую преобразовать в строку (не все данные находит в цикле)
$matches_gross = (string)$matches_gross;
// достаем сумму цены с текстом (брутто)
$result_match = preg_match('/Цена\d{1,6}[рр₽][^aак]|Цена\d{1,6}[^aак]|[^-р]\d{1,6}[рр₽][^aак]|ц\d{1,6}[^в]/iu', $matches_gross, $matches_gross_result );
echo 'брутто: <pre>'; print_r($matches_gross_result); echo '</pre><br>';
if($result_match == true) {
// echo 'Найдено!<br>';
// достаем сумму цены с текстом (нетто)
$result_clear_match = preg_match('/([^xх\/][1-9]\d{1,6}(?!х)(?!x)(?!ш))/ui', $matches_gross_result[0], $matches_net );
// если цена с текстом получена
if ($matches_net[0]) {
echo '<pre>'; print_r($matches_net); echo '</pre>';
// оставляем только цифры
$result_clear_match = preg_match('/\d{2,6}/ui', $matches_net[0], $matches_net );
echo ' Цена чистая: '. $matches_net[0] .'<br>';
echo '<pre>'; print_r($post->guid); echo '</pre>';
echo '<pre>'; print_r($post->ID); echo '</pre>';
echo '<pre>'; print_r($post->post_content); echo '</pre>';
}
// если цена не получена
else { echo ' Пустой массив! ' .$post->ID . '<br>';
echo '<pre>'; print_r($matches_gross); echo '| </pre><br>';
echo '<pre>'; print_r($post->guid); echo '</pre>';
}
// вставляем цену в базу данных
$insert_array = ['post_id' => $post->ID, 'post_price' => $matches_net[0],];
$res_insert = $wpdb->insert( 'wp_posts_extend', $insert_array );
// echo '<pre>'; var_dump($res_insert); echo $post->ID . ' <hr></pre>';
echo '<hr>';
}
// если цена с текстом не получена
else { echo 'Цена не найдена
<br>';
echo '<pre>'; print_r($post->guid); echo '</pre>';
echo '<pre>'; print_r($post->ID); echo '</pre>';
echo '<pre>'; print_r($post->post_content); echo '</pre>';
echo '<hr>';
}
}
}
test_price();
// смотрим очищенный текст
echo '<pre>'; print_r($matches_gross); echo '</pre><br>';
// пробую преобразовать в строку (не все данные находит в цикле)
$matches_gross = (string)$matches_gross;
if($result_match == true) {
...
// если цена с текстом не получена
else { echo 'Цена не найдена
<br>';
echo '<pre>'; print_r($post->guid); echo '</pre>';
echo '<pre>'; print_r($post->ID); echo '</pre>';
echo '<pre>'; print_r($post->post_content); echo '</pre>';
echo '<hr>';
}
$result_match = preg_match('/Цена(\d{1,6})[рр₽](?:[^aак]|$)|Цена(\d{1,6})(?:[^aак]|$)|[^-р](\d{1,6})[рр₽](?:[^aак]|$)|ц(\d{1,6})(?:[^в]|$)/iu', $post, $matches_gross_result );
if ($result_match == true) {
$pattern= array_shift($matches_gross_result); // $pattern - найденная подстрока, вдруг зачем то пригодится
$matches=implode('',$matches_gross_result); // найденная цена - собственно без дополнительной магии.
...
'975₽';
и '975₽ ';
это разные строки. Всего один лишний пробел.проверка есть, она выше в коде:
echo 'брутто: '; print_r($matches_gross_result); echo '
';
она для обоих случаев
= '
Текстиль
32-37/8
975₽
';
// удаляем все пробелы (включая табуляцию и концы строк)
$matches_gross = preg_replace('/\s+/', '', $matches_gross);
='Текстиль32-37/8975₽';