正则表达式 – 如何拆分并保存到数组

前端之家收集整理的这篇文章主要介绍了正则表达式 – 如何拆分并保存到数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
^0806EA^0406F0^^^^^^EF07F7--^E3DC03--^EAFE02--
^0406F0^^^FFE209^^^DFF107^^^F6F508^^^E4DE01^^^EF07F7--^E803E6--

在上面的代码中,我想拆分这个^但问题是,这个十六进制数据具有相同的模式^.

我想要这样的结果:

^0806EA ^0406F0^^^^^ ^EF07F7-- ^E3DC03-- ^EAFE02--
^0406F0^^ ^FFE209^^ ^DFF107^^ ^F6F508^^ ^E4DE01^^ ^EF07F7-- ^E803E6--

要么 :

0806EA 0406F0^^^^^ EF07F7-- E3DC03-- EAFE02--
0406F0^^ FFE209^^ DFF107^^ F6F508^^ E4DE01^^ EF07F7-- E803E6--

解决方法

由于您不希望在拆分中使用任何字符 – 而且您似乎也不希望它们本身成为一个组,因此您需要所谓的“零宽度断言”.由于我们谈论的是插入符号,因此字边界不起作用.它不在一条线的开头或结尾,因此唯一可行的ZWA是前瞻或后视.

既然你想在指定的模式前打破你的块,我会建议一个前瞻,包括:一个插入符号非插入符号或字符串结尾,如下所示:

split /(?=\^(?:[^^]|$))/;

如下图所示:

while ( <DATA> ) { 
    my @list = split /(?=\^(?:[^^]|$))/;
    say "@list";
}

__DATA__
^0806EA^0406F0^^^^^^EF07F7--^E3DC03--^EAFE02--
^0406F0^^^FFE209^^^DFF107^^^F6F508^^^E4DE01^^^EF07F7--^E803E6--

输出

^0806EA ^0406F0^^^^^ ^EF07F7-- ^E3DC03-- ^EAFE02--

^0406F0^^ ^FFE209^^ ^DFF107^^ ^F6F508^^ ^E4DE01^^ ^EF07F7-- ^E803E6--

猜你在找的正则表达式相关文章