在Perl中围绕外部字符分裂.组内的最小假设

Ame*_*ina 3 regex perl

我很难将此线程中的答案适应以下问题:

我想拆分以下字符串:

my $string = "foo{age}, bar{height}. something_else. baz{weight,so='yes',brothers=john.smith}.test{some}"
Run Code Online (Sandbox Code Playgroud)

外面的点周围.结果应该是数组保持

("foo{age}, bar{height}", 
 "foo{weight,parents='yes',brothers=john.smith}", 
 "test{some}")
Run Code Online (Sandbox Code Playgroud)

我想避免对组内部的内容做出假设{}.

我怎么能在Perl中做到这一点?

我尝试调整以下内容:

print join(",",split(/,\s*(?=\w+{[a-z,]+})/g, $string));
Run Code Online (Sandbox Code Playgroud)

通过替换字符类中的内容[]而不成功.

更新:

唯一的字符不是一个内不允许{}组是{}

Mar*_*der 5

由于您不处理嵌套大括号,因此您想要的句点是不会"立即"关闭的句点}."立即"的意思是,{中间没有开口:

split(/[.]\s*(?![^{]*[}])/g, $string)
Run Code Online (Sandbox Code Playgroud)

或者,匹配您感兴趣的部分:

(?:[^.{}]|[{][^{}]*[}])+
Run Code Online (Sandbox Code Playgroud)

哪个可以"展开"到:

[^.{}]*(?:[{][^{}]*[}][^.{}]*)*
Run Code Online (Sandbox Code Playgroud)