Я нахожусь в процессе создания в PHP конвертера табачных гитар в rtttl (Ring Tone Text Transfer Language). Чтобы подготовить вкладку гитары для конвертации в rtttl, я сначала удаляю все комментарии (комментарии отмечены # и заканчиваются - #), затем у меня есть несколько строк, которые задают темп, отмечают настройку и определяют несколько инструментов (Tempo 120 \ nDefine Guitar 1 \ nDefine Bass 1 и т. д. и т. д.), которые вынимаются из вкладки и откладываются для дальнейшего использования.
Теперь у меня, по сути, ничего не осталось, кроме вкладок для гитары. На каждой вкладке указывается название инструмента в сочетании с указанным ранее именем инструмента.
Иногда у нас есть вкладки для 2-х отдельных инструментов, которые связаны между собой, потому что они должны играться вместе, т.е. гитара и бас-гитара, играющие вместе.
Пример 1, вкладка «Стандартная гитара»:
|Guitar 1
e|--------------3-------------------3------------|
B|------------3---3---------------3---3----------|
G|----------0-------0-----------0-------0--------|
D|--------0-----------0-------0-----------0------|
A|------2---------------2---2---------------2----|
E|----3-------------------3-------------------3--|
Пример 2, вкладка «Соединение»:
|Guitar 1
e|--------------3-------------------3------------|
B|------------3---3---------------3---3----------|
G|----------0-------0-----------0-------0--------|
D|--------0-----------0-------0-----------0------|
A|------2---------------2---2---------------2----|
E|----3-------------------3-------------------3--|
|
|
|Bass 1
G|----------0-------0-----------0-------0--------|
D|--------2-----------2-------2-----------2------|
A|------3---------------3---3---------------3----|
E|----3-------------------3-------------------3--|
Я рассмотрел другие способы идентификации вкладок, которые не дали точных результатов. Я надеюсь, что кто-то, кто делает регулярные выражения, сможет помочь мне найти способ идентифицировать одну вкладку гитары и, если возможно, также сможет сопоставить вкладку с несколькими инструментами, связанными вместе.
Как только вкладки окажутся в массиве, я буду просматривать их по одной строке за раз и преобразовывать их в строки rtttl (взорванные на каждой новой строке "\ n").
Я не хочу разделять вкладки гитары в документе с помощью разнесения "\ n \ n" или чего-то подобного, потому что он не идентифицирует вкладку гитары, а скорее идентифицирует пространство между вкладками, а не на вкладках сами по себе.
Я вот уже неделю как берись с этим, и это единственная серьезная задержка, которая у меня есть. Все остальное довольно просто.
На данный момент я пробовал много вариантов шаблона регулярных выражений. Вот один из самых последних тестовых образцов:
<?php
$t = "
|Guitar 1
e|--------------3-------------------3------------|
B|------------3---3---------------3---3----------|
G|----------0-------0-----------0-------0--------|
D|--------0-----------0-------0-----------0------|
A|------2---------------2---2---------------2----|
E|----3-------------------3-------------------3--|
|Guitar 1
e|--------------3-------------------3------------|
B|------------3---3---------------3---3----------|
G|----------0-------0-----------0-------0--------|
D|--------0-----------0-------0-----------0------|
A|------2---------------2---2---------------2----|
E|----3-------------------3-------------------3--|
|
|
|Bass 1
G|----------0-------0-----------0-------0--------|
D|--------2-----------2-------2-----------2------|
A|------3---------------3---3---------------3----|
E|----3-------------------3-------------------3--|
";
preg_match_all("/^.*?(\\|).*?(\\|)/is",$t,$p);
print_r($p);
?>
Стоит также отметить, что внутри вкладок, где расположены тире и #, также могут присутствовать любые варианты букв, цифр и знаков препинания. В начале каждой строки отмечается настройка каждой строки одним из следующих символов без учета регистра: a, a #, b, c, c #, d, d #, e, f, f #, g или g.
Заранее спасибо за помощь в решении этой самой сложной проблемы.