我很难将此线程中的答案适应以下问题:
我想拆分以下字符串:
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)
通过替换字符类中的内容[]而不成功.
唯一的字符不是一个内不允许{}组是{或}
由于您不处理嵌套大括号,因此您想要的句点是不会"立即"关闭的句点}."立即"的意思是,{中间没有开口:
split(/[.]\s*(?![^{]*[}])/g, $string)
Run Code Online (Sandbox Code Playgroud)
或者,匹配您感兴趣的部分:
(?:[^.{}]|[{][^{}]*[}])+
Run Code Online (Sandbox Code Playgroud)
哪个可以"展开"到:
[^.{}]*(?:[{][^{}]*[}][^.{}]*)*
Run Code Online (Sandbox Code Playgroud)