Надо param со значением 3 заменить на hello PHP: $string="https://www.somehost.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3"; $pattern = '/^[a-z]{5}[0-9]{1}[=]{1}3$/'; $replacement = 'hello'; echo preg_replace($pattern, $replacement, $string);
в strtr указываешь определенный промежуток строки и заменяешь на другую а, как бы не знаю какой именно param имеет значение 3
А я вот не могу понять, что именно требуется заменить. Например, нашли мы "param2=3". Теперь есть три варианта развития событий с заменой: 1. param2=hello 2. hello=3 3. hello P.S. @riaron Ограничения начала и конца строки уберите. Т.е. в регулярке вашей символы ^ и $ точно не нужны
Тогда уж: PHP: $string='https://www.somehost.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3'; if(rand(1,2) === 1) { $str = preg_replace('/=3/', '=hello', $string); } else { $str = str_replace('=3', '=hello', $string); } var_dump($string, $str);
В общем, ждал я когда ТС уточнит свой вопрос, но похоже, что он на него забил и интерес остался только у отвечающих. Исходный "param=3" 1. Если на выходе должно быть "param=hello" PHP: $str = preg_replace('/(?<==)3(?=&|$)/', 'hello', $string); 2. Если на выходе должно быть "hello=3" PHP: $str = preg_replace('/([^&]+)(?=(=3(&|$)))/', 'hello', $string); 3. Если на выходе должно быть просто "hello" PHP: $str = preg_replace('/([^&]+)=3(?=&|$)/', 'hello', $string);
Обязательно через регулярку? А если аргумент дважды встречается? Нагляднее разобрать урл по компонентам, пошамаминть с запросом и собрать урл обратно.