Encontre una manera simple de hacerlo:
   Código PHP:
    //obtenemos variable
$quest=filter_var(($_GET['search']), FILTER_SANITIZE_STRING);
// dividimos capitulos y versiculos
$partes = preg_split('/\s*:\s*/', trim($quest, " ;"));
// iniciamos el array libro
$libro = array('nombre' => "", 'capitulo' => "", 'versiculo' => array());
// $partes[0] = libro + capitulo, si isset $partes[1] es versiculo
if(isset($partes[0])) {
// 1.) capitulo
if(preg_match('/\d+\s*$/', $partes[0], $out)) {
$libro['capitulo'] = rtrim($out[0]);
}
// 2.) libro
$libro['nombre'] = trim(preg_replace('/\d+\s*$/', "", $partes[0]));
}
// 3.) versiculo
if(isset($partes[1])) {
$libro['versiculo'] = preg_split('~\s*,\s*~', $partes[1]);
} 
    
  El resultado es (Genesis 3:1-20):  
 Código PHP:
    Array
(
    [nombre] => Genesis
    [capitulo] => 3
    [versiculos] => Array
        (
            [0] => 1-20
        )
) 
    
  Pero no funciona con la búsqueda compleja (Génesis 3:1-20; 2:3; 15; Juan 3:16, Mateo 3:20; Jueces 2:2, 3:20; 5; 1 juan 1:19), ¿Alguien me puede ayudar con eso?