Регулярное выражение: определение (инициализация) массива на языке Си (пример)
Данное регулярное выражения находит в коде программы на языке СИ место объявления (инициализации) массива, но без учёта того, что оно может быть закоммечено или быть частью строковой константы.
В данном случае нам нужно учесть, что может быть объявлен не только простой массив, но и массив указателей (или указателей на указатели и т.п.), а также то, что может быть создан массив указателей на тип void, но массив типа void создать невозможно. И например такого объявления тоже быть не может: int arr[10][0]; В итоге получаем вот такое регулярное выражение: Code (void([\s\t]*\*[\t\s]*)+|short +int|int|long +int|float|short|double|char|bool|long)[\s\t\*]*[a-zA-Z_]([a-zA-Z0-9_]){0,63}(([ \t]*\[[\s\t]*([1-9]|([0-9]{2,}))[\s\t]*\])+)[\s\t]*\; как видите не взято во внимание разнообразие возможных типов (например unsigned int, long long и т.п.), что сделано намерено. Данный вопрос является отдельной задачей) Добавил: COBA (16.09.2010) | Категория: Разное Просмотров: 3045 | Загрузок: 1 | Рейтинг: 0.0/0 | |
Комментарии (0) | |