Regex para que coincida con un nombre de clase CSS

Intento escribir una expresión regular que coincida con una estructura válida de nombre de clase de CSS. Tengo esto hasta ahora:

$pattern = "([A-Za-z]*\.[A-Za-z]+\s*{)"; $regex = preg_match_all($pattern, $html, $matches); 

Sin embargo, un nombre de clase puede estar en los siguientes formatos que mi expresión regular no coincidirá:

 p.my_class{ } p.thisclas45{ } 

Estos son solo algunos casos, he buscado las reglas de cómo puedes nombrar una clase en un bloque de estilos pero no he podido encontrar nada. ¿Alguien sabe dónde están las reglas para las convenciones de nombres de clase?

¿Hay más casos que deba considerar? ¿Qué expresión regular usaría para coincidir con un nombre de clase?

Ya lo he reducido a un bloque de estilo usando la clase de documento PHP DOM.

Eche un vistazo a http://www.w3.org/TR/CSS21/grammar.html#scanner

De acuerdo con esta gramática y la publicación ¿Qué caracteres son válidos en los nombres / selectores de clases de CSS? este debería ser el patrón correcto para buscar clases de CSS:

 \.-?[_a-zA-Z]+[_a-zA-Z0-9-]*\s*\{ 

Nota: Los nombres de etiqueta no son necesarios como prefijo para las clases en css. Solo .hello { border: 1; } .hello { border: 1; } también es válido.

Esta expresión regular:

 /(\w+)?(\s*>\s*)?(#\w+)?\s*(\.\w+)?\s*{/gm 

coincidirá con cualquiera de los siguientes:

 p.my_class{} p.thisclas45{} .simple_class{} tag#id.class{} tag > #id{} 

Puedes jugar con él, en RegExr, aquí .