gpt4 book ai didi

regex - 如何使用 split 捕获正则表达式交替的匹配组?

转载 作者:行者123 更新时间:2023-12-04 18:02:21 24 4
gpt4 key购买 nike

我有一个字符串

my $foo = 'one#two#three!four#five#six';

我想从中提取由 # 分隔的部分或 ! .这很容易使用 split :
my @parts = split /#|!/, $foo;

另一个要求是我还需要捕获感叹号。所以我试过了
my @parts = split /#|(!)/, $foo;

然而,这会返回 undef value 或感叹号(在 split 的规范中也有明确说明)。

所以,我清除了不需要的 undef值与 grep :
my @parts = grep { defined } split /#|(!)/, $foo;

这就是我想要的。

然而我想知道我是否可以以某种方式更改正则表达式,以便我不必同时调用 grep .

最佳答案

当您使用 split ,一旦找到匹配项,您就不能省略空捕获(因为匹配中的捕获总是与正则表达式中定义的一样多)。不过,您可以在此处使用匹配方法:

my @parts = $foo =~ /[^!#]+|!/g;

这样,您将匹配 ! 以外的 1 个或多个字符和 # (使用 [^!#]+ 替代)或感叹号,多次( /g )。

关于regex - 如何使用 split 捕获正则表达式交替的匹配组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43042057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com