我有一些看起来像这样的文字:
[Verse 1]
[B]This is a song with chords [D]and lyrics
Blah [Am7+9d]blah blah [C]blah blah
[Verse 2]
This [C]is the verse
This is the [G]verse
[Chorus]
This is [E#]the Chorus
This is the Chorus
[Bridge]
This is [F]the bridge
This is [Am]the bridge
我想将所有的和弦([A],[Am],[A#],[B],[C]等)一直替换为[G],所以我可以只显示歌词。
这是我目前的代码几乎可以运作:
$line = preg_replace('~\[([A-G].*?)\]~', '', $line);
这可以完成,但它会删除[Chorus]和[Bridge],因为它们以C和B开头。
如何使其完美运行但不删除[Chorus]和[Bridge]?
答案 0 :(得分:4)
$line = preg_replace('~\[(?!Chorus|Bridge)[A-G].*?\]~', '', $line);
答案 1 :(得分:0)
一种不同的(更通用的)解决方案,基于对从所提供的文本片段派生的数据的假设。
if (preg_match("/^\[[^\[\]]*\]$/", $line) === 0)
$line = preg_replace("/\[.*\]/", "", $line);