Intereting Posts
Поиск OAuth DLL для Windows 7 (необходимо использовать с PHP на сервере WAMP) Ошибка php и выпадающий список нуждаются в исправлении Можно выбрать диапазон дат в течение 65 лет с помощью JOIN? Использование метода модели Laravel в запросе Eloquent Альтернатива PDF для динамически создаваемого документа с разрывами страниц array_multisort с поддержкой ассоциации числовых индексов Как автоматически избежать строк в запросе PHP SQL? JMSSerializerBundle: укажите группу для каждого атрибута Сгенерировать случайное число из N цифр Дата и время 24-часовой формат Получить разницу в PhP Как найти первый / второй элемент ассоциативного массива, когда ключи неизвестны? Создайте обратную ссылку для внешнего издателя для ссылки на мой сайт Открытие модального окна "с использованием" PHP В случае необходимости для сайта, который объясняет, как использовать PHPUnit URL-адрес перезаписи, включая заголовок

Regex соответствует имени класса CSS

Я пытаюсь написать регулярное выражение, которое соответствует правильной структуре имени класса CSS. У меня это до сих пор:

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

Однако имя класса может быть в следующих форматах, которые не будет соответствовать моему регулярному выражению:

 p.my_class{ } p.thisclas45{ } 

Это всего лишь некоторые случаи, я осмотрелся, чтобы найти правила того, как вы можете назвать класс в блоке стиля, но ничего не мог найти. Кто-нибудь знает, где правила для соглашений об именах классов?

Есть ли еще случаи, которые мне нужно рассмотреть? Какое регулярное выражение вы бы использовали для сопоставления имени класса?

Я уже сузил его до блока стиля, используя класс PHP DOM Document.

Solutions Collecting From Web of "Regex соответствует имени класса CSS"

Посмотрите http://www.w3.org/TR/CSS21/grammar.html#scanner

Согласно этой грамматике и сообщению Какие символы действительны в именах / селекторах классов CSS? это должен быть правильный шаблон для сканирования классов css:

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

Примечание. Названия тегов не требуются в качестве префикса для классов в css. Просто .hello { border: 1; } .hello { border: 1; } также действительна.

Это регулярное выражение:

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

будет соответствовать любому из следующего:

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

Здесь вы можете поиграть с ним в RegExr.