Как использовать регулярное выражение для анализа этой схемы аккордов?

Рассмотрим следующий пример:

[Ami]Song lyrics herp derp [F]song lyrics continue
[C7/B]Song lyrics continue on another [F#mi7/D]line

Мне нужно разобрать выше и повторить его следующим образом:

<div class="chord">Ami</div>Song lyrics herp derp <div class="chord">F</div>song lyrics continue
<div class="chord">C7/B</div>Song lyrics continue on another <div class="chord">F#mi7/D</div>line

В принципе, мне нужно:

1) измените [ на <div class="chord">,

2), затем добавьте содержимое скобок,

3), измените ] на </div>.

... используя PHP 5.3 +.

Ответ 1

Это сработает.

$tab = "[Ami]Song lyrics herp derp [F]song lyrics continue
[C7/B]Song lyrics continue on another [F#mi7/D]line";

echo str_replace(
    array('[', ']'),
    array('<div class="chord">','</div>'),
    $tab
);

Ответ 2

$result = preg_replace('/\[(.*?)\]/', '<div class="chord">\1</div>', $subject);

# \[(.*?)\]
# 
# Match the character "[" literally «\[»
# Match the regular expression below and capture its match into backreference number 1 «(.*?)»
#    Match any single character that is not a line break character «.*?»
#       Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
# Match the character "]" literally «\]»

Ответ 3

попробовать

echo preg_replace('#\\[([^]]*)\\]#','<div class="chord">$1</div>',$string);

Остерегайтесь html-кода или неверного [] в вашей строке ввода, но

Ответ 4

шаблон

 \[(.*?)\]

Заменить

<div class="chord">$1</div>

Как будет использоваться все регулярное выражение, вы хотите быть осторожным с bad [] парами, и если лирика может каким-то образом содержать [тогда вы захотите правильно избежать этого.