$re = '/(?#skip match process when S exist, or remove optional left most target T, capture left and right part of T.
Use case: if N is not exist, modify/change T to N, or create N. If any create or modify write operated, appending output N to right.
skip exist:)^(?!.*S)(?#
captrue prefix :)^(.*?)(?#
optional target to remove:)(?:T|$)(?#
captrue postfix:)(.*?)$(?#
Test string:
aa
aaT
Tcc
aaTcc
aaTbbTcc
aaS
aaTS
TccS
aaTccS
Saa
SaaT
STcc
SaaTcc
Substitution: $1$2N
Return:
aaN
aaN
ccN
aaccN
aabbTccN
aaS
aaTS
TccS
aaTccS
Saa
SaaT
STcc
SaaTcc)/m';
$str = 'aa
aaT
Tcc
aaTcc
aaTbbTcc
aaS
aaTS
TccS
aaTccS
Saa
SaaT
STcc
SaaTcc';
$subst = "$1$2N";
$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