RegEx для соответствия определенному атрибуту javaDoc в файле CSS и извлечения данных об определении css

Я пытаюсь сохранить некоторые метаданные о стилях CSS, которые наше приложение может использовать для создания меню, позволяющего пользователю выбирать эти стили (среди прочего).

Я думал, что комментарий в стиле JavaDoc был лучшим подходом, и я использовал такой атрибут, как config или похожие. Затем сохраните определение стиля JSON как значение этого свойства.

Я пытался написать некоторый RegEx (PHP), чтобы сделать следующее:

  1. Найти все комментарии JavaDoc с @config приписывать.
  2. Извлечь значение @config как объект JSON
  3. Затем сопоставьте следующие имена css TAG и CLASS, если они определены под ним.

Таким образом, этот комментарий и определение класса могут быть выделены в 3 совпадения.

/**
* @config {name:'Orange Title', order:1}
*/
h1.title_orange {

}
  • Матч 1 : {name:'Orange Title', order:1}
  • Матч 2 : h1
  • Матч 3 : title_orange

Что делает его более сложным, так это то, что часть JSON может быть многострочной, а мультилинии могут содержать или не содержать *,

2

Решение

Самая большая задача состоит в предположениях, которые вы делаете (какие вещи тестировать):

 (?:^\/\*\*[\s\n\r]+\*\s@config\s(.*)$|^\s+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{$)

Вы можете проверить это в этом Rubular.

Я предположил, что у вас есть config в первой строке комментария javaDoc, я также предположил, что у вас может быть несколько пробелов между ними, что ваши слова / классы / идентификаторы могут иметь -,

Что еще тебе нужно?

РЕДАКТИРОВАТЬ

Это прекрасно работает в Rubular. Хотя регулярные выражения должны быть одинаковыми для разных языков, похоже, это не работает в PHP Live RegexАлександр 4 минуты назад

Вы правы, поэтому я спрессовал его в одну матчевую группу и кажется, этот работает (Вы должны нажать preg_match_all Вкладка):

\/[*]{2}[\s\n\r]+\*\s@config\s(.*)[\s\n\r]+.*[\s\n\r]+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{

Это означает, что я рассматриваю javaDoc и CSS вместе (javaDoc с несколькими строками). Тем не менее, могут быть корректировки, которые необходимо внести.

EDIT2

Это удивительно, спасибо большое! Что если @config не всегда была первой записью в комментарии? Это все еще возможно? — Мэтт Брайсон 7 минут назад

Это:

\/[*]{2}(?:[\s\n\r]+.*)*[\s\n\r]+\*\s@config\s(.*)[\s\n\r]+.*[\s\n\r]+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{

Вы можете попробовать это PHP Live Regex в preg_match_all табуляция.

EDIT3

Мэтт развил свое собственное регулярное выражение что-то более простое. Кажется, проблема в том, что группы захвата не могут повторяться бесконечно с этим (чтобы получить все классы / идентификаторы CSS):

(?:[\#\.\,]([\w-]+)\s*)*

https://regex101.com/r/jM0yH0/6

Поэтому это все еще нужно решить …

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]