* */ public function buildRegex($user = null, $style = null, $data = null) { // always work with arrays $user = (array)$user; $style = (array)$style; $data = (array)$data; // clean $user = array_filter(array_map(trim(...), $user)); $style = array_filter(array_map(trim(...), $style)); $data = array_filter(array_map(trim(...), $data)); // user names are encoded $user = array_map(auth_nameencode(...), $user); // quote $user = array_map(preg_quote_cb(...), $user); $style = array_map(preg_quote_cb(...), $style); $data = array_map(preg_quote_cb(...), $data); // join $user = implode('|', $user); $style = implode('|', $style); $data = implode('|', $data); // any data at all? if ($user . $style . $data === '') { throw new Exception('no data passed'); } // replace empty values, set which ones are optional $sopt = ''; $dopt = ''; if ($user === '') { $user = '\S+'; } if ($style === '') { $style = '\S+'; $sopt = '?'; } if ($data === '') { $data = '\S+'; $dopt = '?'; } // assemble return "/^($user)(?:\\s+($style))$sopt(?:\\s+($data))$dopt$/"; } }