You don’t need to do anything with rewrite rules.
Your example (“domain.com/example-slug/?holder=value”) is a perfect example of “Plain” Permalinks. So your starting point is to set Permalinks (Settings > Permalinks) to something other than “Plain”. This will take the “/?” component out of the URL, and generate a URL in your preferred format.
The second thing is to capture the URL, parse it and get the “value” (to use your words). You can do this with a function like the one below. Put this function in your functions.php (or a plugin if you prefer). Then call it on the page/post where you want to get the “value”. The function will yield the “value” as a variable $myvalue. You can expand the function to do more stuff, or you could return the value elsewhere to do something with it.
function getslug(){
// get the url
$myurl = home_url( $wp->request );
//echo "<p>The page url is ".$myurl." </p>"; //DEBUG
// Explode the url to get access to the taxonomy and terms
$pageterms = explode("https://wordpress.stackexchange.com/", $myurl);
//echo "the exploded components of the URL <pre>";print_r($pageterms);echo "</pre>"; //DEBUG
// the value is always the last element in the url, so we'll count the number of elements
$mycount = count($pageterms);
//echo "<p>The element count is ".$mycount." </p>"; //DEBUG
// since array keys always start with zero, the key for the value will be the count minus 1 (to allow for the zero)
$myvalue = $pageterms[$mycount-1];
//echo "<p>My value is ".$myvalue." </p>"; //DEBUG
}
PS: I’ve left my echo statements (used for Debugging) in this example; you can just delete them if you don’t need/want them.