$re = '/((\b\d+)(?:\sPI?N ?#? ?))|((?:PI?N ?#? ?)(\d+))/mi';
$str = '9999XX00999X PIN # 999999
9999XX000999 - PIN#909999
XXXXX XX PIN #9099999
9999XX99X PIN999099
99XX999X PN 9999999
9999999 PIN
90PA999 PN 999999
999009 PIN#
99PA99 PN#9999999
PIN 999990
XXXPIN990999
PIN#999099
PIN# 9990909
PIN#9099999*';
$subst = "test\1";
$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