Есть такая регулярка:
/(\d{2,4})+|\s+(x|-|na|х|\s|на|)+|\s+(\d{2,4})/
Она на ура отрабатывает парсер размера 100 на 60 и т.п.
Но почему то она срабатывает и на строку: 100 руб
Как ее доработать чтобы она четко работала: цифры (разделитель) цена.
Спасибо. P.S: язык Php :)
Предлагаю
'/(\d+)\s*([\p{Pd}xх]|na|на)\s*(\d+)/u'
См. демо выражения
(\d+) - Группа 1: одна и более цифр\s* - 0+ пробельных символов([\p{Pd}xх]|na|на) - разные дефисы (\p{Pd}), x, х, na или на\s* - 0+ пробельных символов(\d+) - Группа 3: одна и более цифрЕсли числа могут быть дробными, можно добавить (?:[.,]\d+)? после \d+:
/(\d+(?:[.,]\d+)?)\s*([\p{Pd}xх]|na|на)\s*(\d+(?:[.,]\d+)?)/u
PHP:
$re = '/(\d+)\s*([\p{Pd}xх]|na|на)\s*(\d+)/u';
$str = '100 на 60, 100 руб';
preg_match_all($re, $str, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
echo $m[1] . ", " . $m[2] . ", " . $m[3] . "\n";
}
// => 100, на, 60
Сборка персонального компьютера от Artline: умный выбор для современных пользователей