Регулярка для url
Есть такая регулярка
$s = preg_replace('/some\/([^a-z])\/([^0-9])/','some/$1/$2', $this->entered_uri);
Подскажите, как сделать так, чтобы url не мог принимать третий, четвертый и т.п. параметр ? Т.е. только some/$1/$2 и ничего более. Например, если я ввожу в адр. строку:
some/test/test1/test2/test3 - то это и показывает, а нужно только some/test/test1. Остальное отсечь, либо вывести ошибку
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Используйте
/some\/([^\/]+)\/([^\/]+).*/
Подробности
some\/- строкаsome/([^\/]+)- Подмаска №1 ($1): один и более символов, отличных от\/\/- символ\/([^\/]+)- Подмаска №2 ($2): один и более символов, отличных от\/.*- ноль и более символов, отличных от символов переноса строки, как можно больше (т.е. оставшаяся часть строки).
Если нужно удалить все нецифровые символы в тексте, захваченным первой подмаской, можно воспользоваться preg_replace_callback:
$this_entered_uri = "some/ads123/test1";
echo preg_replace_callback('/some\/([^\/]+)\/([^\/]+).*/', function($x) {
return 'some/' . preg_replace('~\D+~', '', $x[1]) . '/' . $x[2];
}, $this_entered_uri);