авторитетное регулярное выражение для (s)printf FORMAT string

Я хотел бы ответить на этот вопрос с помощью

Чтобы получить все причудливое форматирование Perl и ключевой доступ к хеш-данным, вы нужна (лучшая версия этой) функция:

# sprintfx(FORMAT, HASHREF) - like sprintf(FORMAT, LIST) but accepts
# "%$" instead of "%$" in FORMAT to access the
# values of HASHREF according to . Fancy formatting is done by
# passing '%',  to sprintf.
sub sprintfx {
  my ($f, $rh) = @_;
  $f =~ s/
     (%%)               # $1: '%%' for '%'
     |                  # OR
     %                  # start format
     (\w+)              # $2: a key to access the HASHREF
     \$                 # end key/index
     (                  # $3: a valid FORMAT tail
                        #   'everything' upto the type letter
        [^BDEFGOUXbcdefginosux]*
                        #   the type letter ('p' removed; no 'next' pos for storage)
         [BDEFGOUXbcdefginosux]
     )
    /$1 ? '%'                           # got '%%', replace with '%'
        : sprintf( '%' . $3, $rh->{$2}) # else, apply sprintf
    /xge;
  return $f;
}

, но мне стыдно за рискованный/грубый подход к захвату «хвоста» строки формата.

Итак: существует ли регулярное выражение для строки FORMAT, которому можно доверять?

6
задан Community 23 May 2017 в 11:52
поделиться