da una stringa devo prelevare una sottostringa di questo seguente formato "x 6 numeri consecutivi y finale" cioè x123654y" (x e y può essere sia maiuscolo che minuscolo).

x123y4y non deve essere preso perché in mezzo a x e y ci sono solo 3 numeri

codice:
$txt = 'ciao questo è un testo e il suo formato da prendere è x123456y e non deve essere preso altro';
substr_xy($txt);

$txt = 'ciao questo è un testo e questo formato è x123456 e non deve essere preso';
substr_xy($txt);

$txt = 'ciao questo è un testo e il suo formato da prendere è x123456y e non deve essere preso altro X12y456y';
substr_xy($txt);
codice:
function substr_xy($txt)
{
    $pos_x = stripos($txt, 'x');
    $sottostringa = substr($txt, $pos_x);
    $pos_x = stripos($sottostringa, 'x');
    $pos_y = stripos($sottostringa, 'y');
    if ($pos_x==false && $pos_y==false)
        return false;
    $sottostringa = substr($sottostringa, $pos_x, $pos_y + 1);
    
    $solo_numeri = substr($sottostringa,1,-1);
    if (is_numeric($solo_numeri) && strlen($solo_numeri)==6)
    {
        return $sottostringa;
    }
    
    return false;
}
lo script funziona, ma vorrei sapere ci sono altri casi particolari che deve tenere conto?
una soluzione più "snella" con le espressione regolare?