$dannie = "Длина: 100 м
Длина 100 метров
Длина 100м";
Нужна регулярка которая будет находить определенное слово (в данном случае длина), и получать цифру идущую за ней, и на этом поиск прекращала, а не шла дальше и цепляла все остальные цифры. Почему то так не срабатывает. Почему не могу понять:
$str = preg_match_all("/([Длина:]+\d)/ui", $dannie, $out);
echo $dlina_result = implode(', ', $out[0]);
Пример: http://sandbox.onlinephpfunctions.com/code/b4efb8e5baba773d4c88e175d9ec8b105a5cd05d
Используйте
$dannie = "Длина: 100 м
Длина 100 метров
Длина 100м";
if (preg_match_all('~Длина:\s*\K\d+(?:[.,]\d+)?~u', $dannie, $matches)) {
echo implode(', ', $matches[0]);
}
Пример работы кода онлайн. См. также демо регулярного выражения.
Подробности
Длина: - буквальный текст\s* - 0 и более пробельных символов \K - оператор, удаляющий весь найденный текст из текущего совпадения \d+ - 1 и более цифр(?:[.,]\d+)? - 1 или 0 повторов последовательности:
[.,] - точка или запятая\d+ - 1 и более цифрРегулярка длина\D*(\d+)/i, брать первую группу:
var s = `Длина: 100 м
Длина 100 метров
Длина 100м`
console.log(s.match(/длина\D*(\d+)/i)[1])
Если я правильно понял, что двоеточие относится к маске и число отделено пробелами, то так:
preg_match_all("/(?<=Длина:)\s*(\d+)/ui", $dannie, $out);
echo $out[0][0];
Продвижение своими сайтами как стратегия роста и независимости