$re = '/^(0|[1-9]+[0-9]*) (@[^@]+@ |)([A-Za-z0-9_]+)( [^\n\r]*|)$/m';
$str = '0 @N1@ NOTE Lorem ipsum dolor sit amet
0 HEAD
1 SOUR FTM
2 VERS 22.2.6.950
1 DEST FTM
1 DATE 31 MAR 2017
1 CHAR UTF-8
3 _LINK http://www.facebook.com/1247584965
2 SOUR @S122@
3 PAGE Facebook update - David Hatch - 6/5/2013
3 _LINK http://www.facebook.com/1247584965
1 RESI
2 DATE BET 1935 AND 1993
2 PLAC San Francisco, California, USA
1 RESI
2 DATE 1994
2 PLAC San Francisco, California, USA
2 SOUR @S605@
3 DATA
4 TEXT Birth date: 20 Sep 1966 Birth place: Residence date: 1994
5 CONC Residence place: San Francisco, CA
1 RESI 106 Oakcrest Rd
2 DATE 26 MAR 2017
2 PLAC San Anselmo, Marin, California, USA
1 FAMS @F500@
1 FAMC @F656@
0 @I923@ INDI
1 NAME Vincent /Crilley/
1 SEX M
1 FAMS @F254@
0 @I5899@ INDI
1 NAME Marjorie Edna /Footitt/
2 SOUR @S506@
2 SOUR @S176@
2 SOUR @S168@
2 SOUR @S624@
3 DATA
4 TEXT Residence date: Residence place: USA
2 SOUR @S115@
3 PAGE Year: 1940; Census Place: St Paul, Ramsey, Minnesota; Roll: T627_1996;
4 CONC Page: 11A; Enumeration District: 90-73.
3 DATA
4 _TEXT Birth date: abt 1918 Birth place: North Dakota Residence date: 1
5 CONC Apr 1940 Residence place: St Paul, Ramsey, Minnesota, United States
2 SOUR @S607@
3 PAGE Year: 1920; Census Place: Carrington, Foster, North Dakota; Roll:
4 CONC T625_1334; Page: 13B; Enumeration District: 117; Image: .
3 DATA';
$subst = "\n2($2) 3($3) 4($4) 5($5) 6($6) 7($7) \n\n8($8) 9($9) 10($10) 11($11) 12($12) 13($13) 14($14) 15($15) 16($16) 18($18) 20($20) 21($21)\n\n\n\n";
$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