我正在编写一小段播放处理歌曲标签的代码,但我遇到了一个问题。
我需要解析每首歌曲选项卡行并将其拆分以获取大块chords一方面,并且words在另一个。
每个块就像:
$line_chunk = array(
0 => //part of line containing one or several chords
1 => //part of line containing words
);
他们应该保持“分组”。我的意思是,只有当函数达到和弦和单词之间的“极限”时,它才应该分裂。
我想我应该使用预分割为了达成这个。我做了一些测试,但我只能分割和弦,而不是和弦“组”:
$line_chunks = preg_split('/(\[[^]]*\])/', $line, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
这些例子向您展示了我想要得到的:
在不包含和弦的线上:
$input = '{intro}';
$results = array(
array(
0 => null,
1 => '{intro}
)
);
在仅包含和弦的行上:
$input = '[C#] [Fm] [C#] [Fm] [C#] [Fm]';
$results = array(
array(
0 => '[C#] [Fm] [C#] [Fm] [C#] [Fm]',
1 => null
)
);
在包含两者的行上:
$input = '[C#]I’m looking for [Fm]you [G#]';
$results = array(
array(
0 => '[C#]',
1 => 'I’m looking for'
),
array(
0 => '[Fm]',
1 => 'you '
),
array(
0 => '[G#]',
1 => null
),
);
关于如何做到这一点有什么想法吗?
Thanks !