Ваше регулярное выражение не учитывает пробелы между группами в скобках (2)
и (a)
в последнем примере. Вы можете добавить <space>*
, чтобы сделать это. Обратите внимание, что вы не можете использовать \s*
, если вы не сопоставляете только одно значение за раз, в противном случае тот факт, что \s
будет соответствовать символу новой строки, может привести к тому, что первое совпадение будет слишком длинным go.
(60\s?ml\s?(?:\w|\(.{0,3}\) *){0,5})
Обратите внимание, что подсчет повторений не имеет смысла. Например, это регулярное выражение будет соответствовать 60ML (2 )(a)(a)(a)(a)
и 60ML (2 )(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)
, возвращая 60ML (2 )(a)(a)(a)(a)
в обоих случаях. Если это не то, что вам нужно, вам нужно добавить привязку к концу регулярного выражения (возможно, $
), чтобы предотвратить его соответствие более длинной строке.
Демонстрация для регулярного выражения regex101