The first bit of PHP regular substitution is 0. Be ignored

  question
$subject = '0300020F005176C5A11A730004F955A2A20CD8-367C-EC5B-9D8C-2CAA0B8FE45D';
 echo preg_replace('/^(\w{8})\w{2}/i','$1'.'08',$subject);
 //output result: 85176c5a11a73004f955a2a20cd8-367c-ec5b-9d8c-2caa0b8f45d
 //Expected Result: 03000020F085176C5A11A73004F955A2A2A220CD8-367C-EC5B-9D8C-2CAA0B8F145D
 //But: Preg_replace ('Regex',' 1'.' _', $ Subject);  This is no problem

Description of Backward Reference by preg_replace Function from PHP Manual:Preg_replace

When operating in the replacement mode and the backward reference is immediately followed by another number (e.g. adding an original number immediately after a matching mode),
Backward references cannot be described using syntax such as \1. For example, \11 will cause preg_replace ()
Can’t understand whether you want a \1 backward reference followed by an original 1 or a \11 backward reference followed by nothing. The solution in this case is to use \${1}1.
This creates an independent $1 backward reference, an independent original 1.

Your replacement part is “$108”, so here you need to replace $1 with ${1} to avoid confusion.

<?  Php
 $subject = '0300020F005176C5A11A730004F955A2A20CD8-367C-EC5B-9D8C-2CAA0B8FE45D';
 echo preg_replace('/^(\w{8})\w{2}/i','${1}08',$subject);