Regex для обнаружения всего, что идет после ключевого слова typedef / class? - PullRequest
1 голос
/ 16 июля 2009

Я играл с подсветкой синтаксиса GEdit. Мне нравится, как Visual Studio выделяет пользовательские типы. Я хотел бы сделать это для моих пользовательских типов в C / C ++ (например, typedef's / classes). Например (в C):

typedef struct Node *pNode;

И пример на C ++:

class BigNumber 
{ 
    // Class stuff here.
};

Посмотрите, как Node выделяется иначе, чем typedef struct (ключевые слова), а *pNode вообще не выделяется. Как я могу написать регулярное выражение, чтобы обнаружить это, и выделить все вхождения Node и BigNumber в моем текущем документе?

1 Ответ

3 голосов
/ 16 июля 2009

Хотя Regex и даст вам хорошие результаты, они никогда не дадут вам идеальных результатов.

Большинство движков регулярных выражений не поддерживают понятие рекурсии. То есть он не может соответствовать ни одному типу выражения, которое требует подсчета (соответствующие скобки, символы скобок и т. Д.). Это означает, что он не сможет соответствовать typedef, который надежно указывает на указатель на функцию.

Чтобы получить идеальные совпадения, вам действительно нужно написать парсер.

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

Например, здесь есть регулярное выражение, которое будет соответствовать определениям типов структур, которые указывают на одно имя и могут иметь или не иметь указатель.

"^\s*typedef\s+struct\s+\w+\s+((\*?\s*)\w+)\s*;\s*$"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...