Хотя я уверен, что вы можете как-то сделать это в одном регулярном выражении, проще всего сделать это пошагово.
Сначала разделите ключ / значение, разделив =
.
my($key,$names) = split /=/, $string;
Теперь, когда у нас есть значение, мы можем удалить {},
$names =~ s/^{(.*)},?$/$1/;
Со всем, что вычистили, у вас есть Kordesch, Karl and Simader, G{\"u}nter and Wiley, John Ray
, который достаточно легко разбить на имена.
my @names = split /\s+and\s+/, $names;
Конечный ,
заставляет меня подозревать, что это является частью более крупной структуры данных. В этом случае было бы безопаснее и надежнее анализировать структуру данных, а не пытаться анализировать ее ad hoc построчно. В комментариях было упомянуто, что это может быть TeX или BibTeX . любое количество модулей для разбора .