htaccess %1 not working correctly

I've been pulling my hair out over this one, though I'm sure it's something incredibly simple...

I have a site with a simple domain (i.e. example.com), and I have my htaccess file setup so that example.com/contact rewrites it to example.com/contact.php like so:

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$

RewriteRule ^about(\/?)$ about.php
RewriteRule ^contact((-?us)?)(\/?)$ contact.php
RewriteRule ^register(\/?)$ register.php

What I am after is for when a user goes to en.example.com or fr.example.com etc. (for languages), it slaps something like ?lang=fr or &lang=fr (? or & depending on if there are other URL parameters)

I have tried something like this:

RewriteCond %{HTTP_HOST} ^(\w{2})\.example\.com$

RewriteRule ^about(\/?)$ about.php?lang=%1
RewriteRule ^contact((-?us)?)(\/?)$ contact.php?lang=%1
RewriteRule ^register(\/?)$ register.php?lang=%1

I tested using :https://htaccess.madewithlove.be

The above works alright, putting in "en.example.com/about" it returns "en.example.com/about.php?lang=en", but if I try "en.example.com/contact" it returns "en.example.com/contact.php?lang=%1".

I did try looking around for some generic examples, but none seem to meet quite what I'm after, I appreciate any help :)