1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| $pattern = <<<'EOD'
~
( # <-- ce groupe n'a pas besoin d'être capturant,
# on peut trés bien mettre $0 dans le motif de remplacement.
\b # <-- ce word-boundary devrait être en facteur avec toutes les
# branches, pas juste cette branche en particulier.
(?: # <-- Du coup, avec le point précédent, ce groupe devient inutile.
G,C,D
|
A,B,C
|
E,C,D
)
|
[ABCDEFG] # <-- [A-G]
(?: \# | b )?
(?: / [ABCDEFG] b )?
(?:
(?: # <-- groupe inutile
(?: maj | min | sus | add | aug | dim )
(?:
\d{0,2}
(?: \# \d{1,2} | sus \d )?
)? # <-- ce groupe optionnel est inutile, car tout ce qu'il
# contient est déjà optionnel.
)
|
(?: # <-- groupe inutile
m \d{0,2}
(?:
(?: maj | add | \# ) \d{0,2}
)?
)
| # dernière branche
(?: # <-- groupe inutile
-? \d{0,2}
(?:
\( [^)]* \)
|
\# \d{1,2}
)?
)
)? # <-- comme une des branches (la dernière) contenue dans ce
# groupe est constituée uniquement d'élément optionnel,
# le quantificateur '?' est inutile. (a|b|c?)? <=> (a|b|c?)
)
~x
EOD; |
Partager