Я приглашаю вас использовать PCRE в PHP:
(?=(?P<ES1>.*&s1=)?)(?(ES1)RegexToMatchIfS1AlreadyExist|RegexToMatchIfS1NotExist)
Итак
$result = preg_replace('/^(?=(?P<ES1>.*&s1=)?)(?(ES1)(?P<Left>.*&s1=)(?P<Right>.*+)$|RegexToMatchIfS1NotExist)/', '${1}newvalue${2}', ...);