我想拆分字母"b"而不从输出中删除它.如果没有后跟"c",我只想拆分"b".我如何结合这两个条件?这是我到目前为止所尝试的:
$val ="abbcdebffgbhiabbbcde";
@as = split(/(?<=b)/,"$val",) if !~/(bc)/g;
foreach (@as){
print "$_\n";
}
Run Code Online (Sandbox Code Playgroud)
这是我的预期输出:
ab
bcdeb #here 'b' present but not split because succeeding 'c' is present.
ffgb
hiab
b
bcde #here 'b' present but not split because succeeding 'c' is present.
Run Code Online (Sandbox Code Playgroud)
目前,我的代码在所有"b"上分裂.如何更改它以结合这两个条件?
你想要一个负面的先行断言:
use strict;
use warnings;
my $val = "abbcdebffgbhiabbbcde";
my @as = split(/(?<=b)(?!c)/, $val);
print "$_\n" foreach @as;
Run Code Online (Sandbox Code Playgroud)
只要没有后跟"c",就会在字母"b"前面的任何一点上分开.这(?!c)是一个负前瞻断言,这意味着任何后跟"c"的"b"都不匹配.
输出:
ab
bcdeb
ffgb
hiab
b
bcde
Run Code Online (Sandbox Code Playgroud)