Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Диапазонное регулярное выражение

#php #регулярные_выражения


Что то голову сломал. Нужно вырезать все числа в диапазонах от 45...250 и 450...2500
из строки. Помогите с регулярным выражением. В строке помимо цифр еще может быть и текст. 
    


Ответы

Ответ 1



Ничего лишнего: = 45 && $a <= 250) || ($a >= 450 && $a <= 2500) ? false : $a; }, $string);

Ответ 2



Вместо возможного, но монструозного регулярного выражения на тему, лучше воспользуйтесь preg_replace_callback: $text = "какой 10 то текст 50 и еще текст 2000 тест 2400 и 4000 ещё"; $res = preg_replace_callback("/\d+/", function($match){ $num = +$match[0]; if(($num > 45 && $num < 250) || ($num > 450 && $num < 2500)){ return ''; } return $num; // какой 10 то текст и еще текст тест и 4000 ещё }, $text); print $res; https://repl.it/KoV6/0

Ответ 3



45...250 Делим на куски 45..49, 50..99, 100..199, 200..249, 250 и собираем: 4[5-9]|[5-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|250 450...2500 Можно сделать аналогично, но не нужно :) 45...250 и 450...2500 Просто добавим необязательные последние цифры к прошлому выражению: 4[5-9][0-9]?|[5-9][0-9][0-9]?|1[0-9][0-9][0-9]?|2[0-4][0-9][0-9]?|2500? Нужно вырезать все числа в диапазонах Чтобы не было ложных срабатываний, надо потребовать, чтобы по краям были не цифры: (? 250 && $val < 450 || $val > 2500) echo $val . " - FAIL\n"; sort($vals); $found = preg_replace('/(?

Ответ 4



Используй preg_replace_callback http://php.net/manual/ru/function.preg-replace-callback.php $string = 'test100-bigtest2000ANd###9999999'; function checkNumber($matches) { if($matches[0] >= 45 && $matches[0] <=250) { return ''; } if($matches[0] >= 450 && $matches[0] <=2500) { return ''; } return $matches[0]; } echo preg_replace_callback('/\d{2,4}/u', 'checkNumber', $string);

Комментариев нет:

Отправить комментарий