我正在尝试这样的事情
^(.*)[\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 或 ''
- rest 是第一个匹配,不能为 NULL,只有 ''
有什么建议吗?