RegEx, чтобы найти вложенные блоки кода - PullRequest
1 голос
/ 19 ноября 2010

Я пишу кодировщик, и мне нужна помощь. Мне нужно найти блоки кода и я хочу использовать регулярные выражения. Код, который мне нужно отформатировать, выглядит в основном так:

KEYWORD name {
    word
    word
    ...
}

Я могу найти блоки, начинающиеся с {и заканчивающиеся} этим выражением:

[{](.*?)[}]

Но я не знаю, как добавить часть "KEYWORD name" в выражение. Обе являются пользовательскими строками, которые могут содержать любой символ, кроме ;, { и }.

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

Ответы [ 2 ]

3 голосов
/ 19 ноября 2010

Вы можете просто сделать:

KEYWORD name {.*?}

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

Поскольку KEYWORD и name являются произвольными строками, которые могут содержать любой символ, кроме ; , { и }:

[^;,{}]+\s+[^;,{}]+\s*{.*?}
2 голосов
/ 19 ноября 2010

(. +?) \ S + (. +?) \ S + {(. *?)}

Это: все, что не является пробелом, за которым следует один или несколько пробельных символов, за которыми следует что-либоэто не пробел, один или несколько пробельных символов, а ваш блок кода.

Если KEYWORD может содержать только заглавные буквы и name, скажем, все буквы, цифры и подчеркивания, он должен выглядеть следующим образом:

([A-Z]+?)\s+([A-Za-z0-9_+?)\s+\{(.*?)\}

Обратите внимание, что если ваши кодовые блоки могут быть вложенными, у вас будут проблемы с этим регулярным выражением, поскольку оно будет соответствовать как первому {, так и первому}.

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