Вы можете сопоставить, используя якорь \G
, который устанавливает позицию в конце предыдущего совпадения и фиксирует ваши значения в группе:
(?:\bmyFunction\(|\G(?!^))([^,]+)(?:\h*,\h*)?(?=[^)]*\))
В Java:
String regex = "(?:\\bmyFunction\\(|\\G(?!^))([^,]+)(?:\\h*,\\h*)?(?=[^)]*\\))";
Объяснение
(?:
Группа без захвата
\bmyFunction\(
Граница слова, чтобы совпадение было частью большего слова, соответствуйте myFunction и открывающим скобкам (
|
или
\G(?!^)
Утверждение позиции в конце предыдущего матча, а не в начале строки
)
Закрыть группу без захвата
([^,]+)
Захват в группе, соответствующей 1+ раз, не запятая
(?:\h*,\h*)?
Опционально соответствует запятой, окруженной 0+ горизонтальными пробелами
(?=[^)]*\))
Позитивный взгляд, утверждаем, что справа - закрывающая скобка )
Regex demo | Java демо
Например:
String patternString = "(?:\\bmyFunction\\(|\\G(?!^))([^,]+)(?:\\h*,\\h*)?(?=[^)]*\\))";
String input = "myFunction(hello ,world, test)";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
Результат
hello
world
test