Я не пытаюсь что-то вроде этогоRegexp, алчность до второго матча
^(.*)[\s]*(?:\[[\s]*(.*)[\s]*\])?$
Моей идеи заключается в том, что первый матч возвращает все, но время от времени второго матча, который ничего внутри []. Входящая строка для соответствия уже обрезана.
Например
'aaaaa [] [ddd]' -> returns 'aaaa []' plus 'ddd'
'[] [ddd]' -> returns '[]' plus 'ddd'
'aaaaaaaa' -> returns 'aaaaaaa' plus NULL
'aaaaaaaa []' -> returns 'aaaaaaa' plus ''
'aaaaaa [' -> returns 'aaaaaa [' plus NULL
'aaaa [] ddd' -> returns 'aaaa [] ddd' plus NULL
'[a] [b] [c] [d]' returns '[a] [b] [c]' plus 'd' instead of '' plus 'a] [b] [c] [d'
'[fff]' -> return '' plus 'fff' <- That's particular since first match can never be null
Мои основные проблемы связаны с первого матча, так как. * (Глотает все) и *? (Проглатывает только до первой], если несколько) дают нежелательный результат
псевдокод алгоритма будет что-то вроде:
- Если последний символ является «]», второй матч будет что-нибудь внутри вплоть до ближайший «[» в обратном направлении (если есть) -> это может быть пустым или «», если входной строка заканчивается «[]»
- Отдыхать первый матч, который не может быть NULL, только «»
Любые sugug Stion?
Может «второй матч, который нибудь внутри []» включает в себя другие квадратные скобки? – Gareth
Означает ли это, что 'a [] [] [] [] [asd]' должен давать только 'a [] [] [] []' и 'asd'? –
@ user1352530 если он может, то я думаю, что использование regex здесь не очень хорошая идея (так как неопределенный вложенный уровень - проблема в регулярном выражении - не неразрешимая причина) –