Регулярки для меня пока сложновато( Пытаюсь составить для отсеивания линков, которые можно проверить на простую sql-инъекцию, типа "id=1" и подобные. Получилось вот что: ^.*[a-zA-Z]=[0-9]+.*$ Но она пропускает варианты типа id=10abc id=1abc0 Логику я понимаю, после чисел нужна проверка, чтобы это был или конец строки, или символ & или ; Но как это правильно записать?
Из списка сайтов типа: site.ru/index.php site.ru/index.php?id=10 site.ru/index.php?id=abc site.ru/index.php?id=10abc site.ru/index.php?id=a10bc site.ru/index.php?id=1abc0 site.ru/index.php?id=10&cid=10 site.ru/index.php?id=10;cid=10 Нужно получить только: site.ru/index.php?id=10 site.ru/index.php?id=10&cid=10 site.ru/index.php?id=10;cid=10 Сейчас же я получаю, кроме нужного, еще и: site.ru/index.php?id=10abc site.ru/index.php?id=1abc0
ну если нужночто-то боле универсальное, то я бы сделал так Code: <? $text = "site.ru/index.php site.ru/index.php?id=10 site.ru/index.php?id=abc site.ru/index.php?id=10abc site.ru/index.php?id=a10bc site.ru/index.php?id=1abc0 site.ru/index.php?id=10&cid=10 site.ru/index.php?id=10;cid=10"; $ex = explode("\n",$text); foreach($ex as $str){ $true = 1; preg_match_all("/=([0-9a-zA-Z]{1,20})/",$str,$pars); if( !count($pars[1]) ) { $true = 0; } foreach($pars[1] as $str2) { if( !is_numeric($str2)) { $true = 0; } } if($true){ echo $str."<br>"; } } ?>
PHP: <?$links = <<<eolsite.ru/index.phpsite.ru/index.php?id=10site.ru/index.php?id=abcsite.ru/index.php?id=10abcsite.ru/index.php?id=a10bcsite.ru/index.php?id=1abc0site.ru/index.php?id=10&cid=10site.ru/index.php?id=10;cid=10eol;preg_match_all('|.+=\d+(?![\w%]+)|',$links,$res);echo "<pre>";print_r($res);echo "</pre>";