Я борюсь с Regex уже несколько часов и, похоже, не могу найти последнюю часть решения. Я в основном разбираю C -Header файлы построчно, чтобы найти переменные.
Следуя возможным случаям строк, с которыми я могу столкнуться, которые должны передать Regex:
//#define variable_name { 300 }
#define variable_name { 300 }
//#define variable_name
#define variable_name
//#define variable_name { 300 } // Comment
#define variable_name { 300 } // Comment
#define variable_name // Comment
//#define variable_name // Comment
Следующие правила применяются к каждой строке выше:
- При желании строка может начинаться с косой черты с комментариями (т.е. //)
#define variable_name
всегда будет присутствовать - Переменная может иметь значение (например, {300})
- Значение переменной (если имеется) может быть всех возможных типов (текст, число или вектор)
- Строка может иметь ведущий комментарий, либо после значения, либо непосредственно после имени переменной
Мне удалось успешно создать следующее выражение вплоть до значения необязательного значения переменной или необязательного комментария:
/^(\/\/)?(#define)\s(\w+)\s?(.*[\/\/]?)?
Выражение можно проверить здесь: https://regex101.com/r/krZB71/3/
Проблема, с которой я столкнулся, видна в группе 4 пятого (5) и шестое (6) совпадение, значение и ведущий комментарий заканчиваются b Это сгруппировано вместе ... Моя цель - отдельно сгруппировать имя переменной, необязательное значение, необязательный ведущий комментарий
Мне нужна помощь для части после \s?
:
/^(\/\/)?(#define)\s(\w+)\s? xxxxxxxxxx
Любая помощь высоко ценится