$re = '/="?(?<currentValue>[^\"\n]*)"? # renovate:(?:[\s]+datasource=[\"\']*(?<datasource>[^\s\"\']*)[\'\"]*|[\s]+depName=[\'\"]*(?<depName>[^\s\'\"]*)[\'\"]*|[\s]+registryUrl=[\'\"]*(?<registryUrl>[^\s\'\"]*)[\'\"]*|[\s]+versioning=[\'\"]*(?<versioning>[^\s\'\"]*)[\'\"]*|[\s]+extractVersion=[\'\"]*(?<extractVersion>[^\s\'\"]*)[\'\"]*)*/m';
$str = '# different prefix (shell scripts)
VERSION=0.1.0 # renovate:
DEP_VERSION=0.1.0 # renovate:
# different prefix (makefile)
VERSION?=0.1.0 # renovate:
DEP_VERSION:=0.1.0 # renovate:
# order does not matter
VERSION?=v1.28.0 # renovate: datasource=github-releases registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io datasource=github-releases depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint datasource=github-releases versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver datasource=github-releases extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0 datasource=github-releases
# values can be wrapped between " and \'
VERSION?=v1.28.0 # renovate: datasource="github-releases" registryUrl="https://docker.io" depName="adrienverge/yamllint" versioning="semver" extractVersion="example-v1.1.0"
VERSION?=v1.28.0 # renovate: datasource=\'github-releases\' registryUrl=\'https://docker.io\' depName=\'adrienverge/yamllint\' versioning=\'semver\' extractVersion=\'example-v1.1.0\'
VERSION?=v1.28.0 # renovate: datasource="\'""\'\'\'"github-releases"\'""\'\'\'" registryUrl="\'""\'\'\'"https://docker.io"\'""\'\'\'" depName="\'""\'\'\'"adrienverge/yamllint"\'""\'\'\'" versioning="\'""\'\'\'"semver"\'""\'\'\'" extractVersion="\'""\'\'\'"example-v1.1.0"\'""\'\'\'"
# ignore multiple spaces
VERSION?=v1.28.0 # renovate: datasource=github-releases registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io datasource=github-releases depName=adrienverge/yamllint versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint datasource=github-releases versioning=semver extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver datasource=github-releases extractVersion=example-v1.1.0
VERSION?=v1.28.0 # renovate: registryUrl=https://docker.io depName=adrienverge/yamllint versioning=semver datasource=github-releases extractVersion=example-v1.1.0
';
$subst = "$datasource $registryUrl $depName";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php