Здравствуйте!
Проблема, с которой вы можете столкнуться, часто может быть связана с тем, как выстроено регулярное выражение, либо с тем, как именно вы используете цикл для поиска. На первый взгляд ваше регулярное выражение выглядит как долгий поиск разных цен, но оно имеет несколько проблем, которые могут вызвать неожиданные результаты.
Убедитесь в том, что регулярное выражение действительно корректно и работает должным образом.
Попробуйте упростить регулярное выражение и убедиться, что оно работает для множества случаев.
Убедитесь в том, что регулярное выражение используется правильно в цикле, если таковой имеется.
Для вашего примера регулярное выражение можно упростить до:
function test_price_min(){
$post = '
Текстиль
32-37/8
975₽
';
$result_match = preg_match('/\d{1,6}\s*[рр₽]/ui', $post, $matches_gross);
if ($result_match) {
echo '';
print_r($matches_gross);
echo '
';
}
}
test_price_min();
Вот пояснение изменения:
Регулярное выражение
\d{1,6}\s*[рр₽]
ищет цену с необязательным пробелом между цифрами и символами валюты.
Флаг
ui
позволяет проводить нечувствительный к регистру поиск в унифицированной кодировке.
Если это все еще не решает вашу проблему, убедитесь, что при использовании цикла вы правильно передаете строку для анализа. Приведу пример использования регулярного выражения в цикле для множества строк:
function test_price_min($posts){
foreach ($posts as $post) {
$result_match = preg_match('/\d{1,6}\s*[рр₽]/ui', $post, $matches_gross);
if ($result_match) {
echo '';
print_r($matches_gross);
echo '
';
}
}
}
$posts = [
'Текстиль
32-37/8
975₽',
'Товар
12345р',
'Цена 5000
7500₽'
];
test_price_min($posts);
В этом примере
$posts
является массивом строк, для которых регулярное выражение проверяется в цикле.