Я пытаюсь написать скрипт для организации моей библиотеки mov ie. Все мои фильмы хранятся с одним и тем же шаблоном
Mov ie Имя [4-DI GIT -ГОД, ЯЗЫК +, SUB LANGUAGE *]
где «+» означает один или несколько аргументов, а «*» ноль или более (чтобы соответствовать нотации регулярного выражения). Я подумал написать регулярное выражение для соответствия этим шаблонам, и я протестировал его здесь . Выражение, которое я придумал:
^(?!\n)
([{a-z}{A-Z}\d\s\-\:\"\.àèéòùì]+)
\s
\[([\d]{4})(?:\,\s)
(?:(ITA|ENG|JAP)
(?:\,\s)?)+(SUB (?:ITA|ENG|JAP)
(?:\,\s)?)*\]$
Кажется, оно выполняет свою работу в сопоставлении, но мне не удается захватить все языки. Если вы видите в примере # 2
Spirited Away [2001, ENG, SUB ITA, SUB ENG]
mov ie подбирается так, как я хочу, но захваты
Полное совпадение Унесенные призраками [2001, ENG, SUB ITA, SUB ENG]
Группа 1. Унесенные призраками
Группа 2. 2001
Группа 3. ENG
Группа 4. SUB ENG
Как видно, сопоставляются только последние сабвуферы, и то же самое происходит в последнем примере для языка, где захватывается только JAP. Как я могу захватить все данные, а не только последние? Заранее спасибо за любые ответы.
РЕДАКТИРОВАТЬ: сценарий на C ++, поэтому регулярное выражение будет использовать синтаксис ECMAScript.