Как исправить Regexp выражение на поиск аккордов в тексте?

Необходима помощь в изменении регулярного выражения, который ищет в тексте "аккорды" для отображения картинок и перевода в другую тональность.

Код приведем ниже
// ищет основную часть аккорда для перевода в другую тональность 
private $search_trans = '`([ABCDEFGH][b#]?(?=\s(?![a-zA-Z])|(?=(2|5|6|7|9|11|13|6\/9 |7\-5|7\-9|7\#5|7\#9|7‌​\+5|7\+9|7b5|7b9|7sus2|7sus4| add2|add4|add9|aug|dim|dim7|m\|maj7|m6|m7|m7b5|m9|m1‌​ 1|m13|maj|maj7|maj9|maj11|maj13|mb5|m|sus|sus2|sus4|\))(?=(\s|\/ )))|(?=(\/|\.|-|\(|\)))))`'; 
// Ищет аккорд целиком 
private $search_img = '`([ABCDEFGH][b#]?[m]?[\(]?(2|5|6|7|9|11|13|6\/9|7\-5|7\-9|7 \#5|7\#9|7\+5|7\+9|7b5|7b9|7sus2|7sus4|add2|add4|add9|aug|dim|dim 7|m\|maj7|m6|m7|m7b5|m9|m11|m13|maj|maj7|maj9|maj11|maj13|mb5|m|s us|sus2|sus4)?(\))?)(?=\s|\.|\)|-|\/)`';


Примерный текст песни
Вступление: :4/4: Emadd9 Emsus4add9 | Emadd9 Emsus4add9
:6/4: Emadd11 Emsus4add9 Em | :4/4: H H Hsus4 H

Em Emsus4add9
Только там, где алым метит
Em Am/E
Солнце спину горизонта,
Em Am6/E
Где сирень кудрявит ситец,
Em Hsus4 H
И поёт прибой;
Em Emsus4add9
Где пушистая пшеница
Em Am/E
И, как лезвие, осока,
Em Am6/E
Где парящей в небе птицей
Em Hsus4 H


В чем заключается проблема регулярного выражения:
1. Не находит двухсложные аккорды типа Emsus4add9 Emadd11
2. аккорд Am6/E воспринимает за два аккорда, а хочется чтобы в search_img он как целый находил.
  • Вопрос задан
  • 2382 просмотра
Пригласить эксперта
Ответы на вопрос 1
OlegLazarenko
@OlegLazarenko
Проверяйте
private $search_img = '`([ABCDEFGH][b#]?[m]?[\(]?(2|5|6|7|9|11|13|6\/9|7\-5|7\-9|7 \#5|7\#9|7\+5|7\+9|7b5|7b9|7sus2|7sus4|add2|add4|add9|aug|dim|dim 7|m\|maj7|m6|m7|m7b5|m9|m11|m13|maj|maj7|maj9|maj11|maj13|mb5|m|s us|sus2|sus4){0,2}(\/[A-H])?(\))?)(?=\s|\.|\)|-|\/)`';
Должно находить двухсложные и воспринимать Am6/E как один целый аккорд.
С первой регуляркой что не так?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы