Разделение - это опция, только когда символ разделения не используется в шаблонах для соответствия самому себе.У меня была ситуация, когда плохо отформатированная строка, разделенная запятыми, должна быть разбита на любой из ряда известных параметров.
то есть параметры '1,2', '2', '2,3' subject '1, 2,3 '.
Разделение на', 'приведет к' 1 ',' 2 'и' 3 ';только одно ('2') является допустимым соответствием, это происходит потому, что разделитель также является частью параметров.
Наивное регулярное выражение будет выглядеть примерно так: '~ ^ (1,2 | 2 | 2, 3) (?:, (1,2 | 2 | 2,3)) * $ ~ i ', но это сталкивается с проблемой захвата одной и той же группы.
Моим «решением» было просторазверните регулярное выражение, чтобы найти максимально возможное количество совпадений: '~ ^ (1,2 | 2 | 2,3) (?:, (1,2 | 2 | 2,3))? (?:, (1,2 | 2 | 2,3))? $ ~ I '(если доступно больше опций, просто повторите бит' (?:, (1,2 | 2 | 2,3))? '. Это приведет к пустому значениюстроковые результаты для «неиспользуемых» совпадений.
Это не самое чистое решение, но работает, когда вам приходится иметь дело с плохо отформатированными входными данными.