Как я могу читать классы, идентификаторы или стили тегов внутри текстового файла, используя регулярные выражения? - PullRequest
0 голосов
/ 23 мая 2011

У меня проблема с регулярным выражением, мне нужно регулярное выражение для чтения имен классов со свойствами и то же самое с идентификаторами и тегами, каждое совпадение должно иметь один блок; имя класса (или имена классов) с их стилем!

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

#myId {
    margin: 10px 8px 9px 0;
}

.myClass1 {
    margin: 10px -8px 9px 0;
    padding: 10px 8px 9px 0;
}

-my-tag {
    margin-down     :-10px;
    margin-left: 10px;
    margin-right: 10px;
}

-my-tag #my-id{
    margin-down     :-10px;
    margin-left: 10px;
    margin-right: 10px;
}
#_myI4D6 {margin:10px;}

.myclass.myclass_too {
}
.myclass .myclass_too {                                
    margin-up:10px;
    bac: url "(../../image/p_n-G.png)";
    Margin: 10px 0 10PX 10Px;
    }

#myID .myclass:first-child my-tag {
     margin:     10px;
}

.emptyclass {
}
.classname 
tagnam {
  padding: 40px 999px        ; 
}

.className #myid
{
    maRgin: 10px 0 10px 10px;
}

первый матч должен быть:

#myId {
        margin: 10px 8px 9px 0;
    }

Для продвинутых, если вы можете решить проблему с комментариями, может быть, класс прокомментировал как:

/* #myId {
        margin: 10px 8px 9px 0;
    } */

Мне не нужно совпадать.

Примечание: я пишу программу на C #, и, пожалуйста, обратите внимание также на проблемы с пробелами (табуляции, переносы строк и пробелы).

Ответы [ 2 ]

5 голосов
/ 23 мая 2011

Похоже, вы пытаетесь реализовать синтаксический анализ CSS в C #. Я не могу помочь вам с регулярным выражением, но я настоятельно рекомендую вам избегать такой реализации самостоятельно и использовать существующую библиотеку CSS для разбора и сэкономить массу усилий.

1 голос
/ 23 мая 2011

попробуйте это с Regex.Matches

Regex.Matches(cssString, @"[^{]+\{[^}]+?}");

Каждое совпадение должно быть полным блоком.

Оттуда вы можете получить селектор от бита допервый '{' в каждом совпадении.

Предупреждение!

Как Самир Талвар прокомментировал непосредственно на ваш вопрос - подход с использованием регулярных выражений особенно будет бороться с вложенными символами {{и '}'в рамках стилевых правил;потому что Regex не может обрабатывать контекст.

Возможно, вы захотите вместо этого взглянуть на решение на основе грамматики с Antlr (крутая кривая обучения, но уже есть грамматика css 2.1, еслиВы ищете вниз по этой странице );или действительно, как предлагали другие люди, парсер, специально созданный для анализа CSS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...