Не могу понять, почему это регулярное выражение (regex101)
/[\|]?([a-z0-9A-Z]+)(?:[\(]?[,][\)]?)?[\|]?/g
захватывает весь ввод, а это (regex101)
/[\|]+([a-z0-9A-Z]+)(?:[\(]?[,][\)]?)?[\|]?/g
захватывает только |Func
Строка ввода - |Func(param1, param2, param32, param54, param293, par13am, param)|
Также как я могу сопоставить повторяющуюся группу захвата обычным способом? Например. у меня есть регулярное выражение
/\(\(\s*([a-z\_]+){1}(?:\s+\,\s+(\d+)*)*\s*\)\)/gui
И входная строка - (( string , 1 , 2 ))
.
Regex101 говорит: «Повторяющаяся группа захвата захватит только последнюю итерацию. Поместите группу захвата вокруг повторяющейся группы, чтобы захватить все итерации ...». Я пытался последовать этому совету, но мне это не помогло.
\|+([a-z0-9A-Z]+)(?:\(?(\w+(?:\s*,\s*\w+)*)\)?)?\|?
. Вы не можете захватить все повторяющиеся захваты с помощью PCRE, вы можете сопоставить их с помощью регулярного выражения на основе\G
. См.(?:\G(?!\A)\s*,\s*|\|+([a-z0-9A-Z]+)\()\K\w+
. - person Wiktor Stribiżew   schedule 11.01.2017