Вы можете попробовать это [#|\.][\w]+\.?([\w\-]+\s?)
это сработало на этих
#id {
#id.class {
#id, #otherId {
#class-dashed
#class_dashed
ul li:after {content: " #id.class { ";}
.class {background-color: #fff250}
#id.class {color:#ff}
Также нашел хороший инструмент , чтобы поиграть с различными вариантами. Все еще будет проблема с цветами, но вы не можете избавиться от этого, поскольку они следуют тем же правилам, что и идентификаторы.
обновление
исключая :
из результатов для несоответствия цветов.
(?<![: ])[#\.][\w]+\.?([\w-]+\s?)
вам понадобится движок регулярных выражений, поддерживающий отрицательный взгляд назад, не очень знакомый с php, поэтому не знаю, есть ли он, но я бы предположил, что он есть.