A * represents 0 or more characters matching the character preceding the *, in your case however the preceding character is an non-escaped bracket which is part of a capture group, therefore the * has 'nothing to repeat'. I will assume you are trying to capture URL of all anchor tags that have a href ending with register.php. On a side note your pattern is assumably missing delimiters, the only reason it hasn't thrown an error is the fact that the character at the start and end of your pattern, just happen to be valid delimiters.
preg_match_all('<a href="(.*?)register.php" class=l>',$html,$links);