假设我正在使用 Perl 的 split 函数来拆分文件的内容。
例如:
这个 foo 文件有+一堆;(随机)“那个”地方的东西
所以假设我想使用空格和分号作为分隔符。
所以我会使用类似的东西:
split(/([\s+\;])/, $fooString)
Run Code Online (Sandbox Code Playgroud)
我无法找出一种语法(或者即使它存在)来捕获分号并丢弃空格。
你似乎要求类似的东西
my @fields_and_delim = split /\s+|(;)/, $string; # not quite right
Run Code Online (Sandbox Code Playgroud)
但这并不完全是它看起来的样子。它还返回空元素(带有警告),因为\s+匹配时()不会捕获任何内容,但$1仍按要求返回,并且它是undef. 当您的分隔符在字符串中组合在一起时,还有更多虚假匹配。
所以过滤
my @fields_and_delim = grep { defined and /\S/ } split /(\s+|;)/, $string;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您通常可以捕获分隔符。
这也可以用正则表达式来完成
my @fields_and_delim = $string =~ /([^\s;]+|;+)/g;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它可以更好地控制您从字符串中选择的内容和方式。
如果重复;需要单独捕获更改;+为;