{ lib, ... }:
{
  # returns matching part of _regex_ _string_; null indicates failure.
  rgxToString = regex: string:
    let
      match =
        let
          head = lib.substring 0 1 regex;
          sec = lib.substring 1 2 regex;
        in
        if head == "^"
          || head == "."
          || (sec == "*" || sec == "+" || sec == "?")
        then builtins.match "(${regex}).*" string
        else builtins.match ".*(${regex}).*" string;
    in
    if lib.isList match
    then lib.head match
    else null;
}