Помогите составить регулярное выражение

1. tomvlad 3860 11.12.14 05:25 Сейчас в теме
В выражении на встроенном языке нужно найти неявное объявление всех переменных, при этом исключить комментарии.

Пример:
Переменная1 = Новый ТаблицаЗначений;
//Переменная2 = Новый СписокЗначений;
Переменная3 = Новый Структура; Переменная4 = Новый Массив;
//Переменная5 = Новый ДеревоЗначений;

Должно получиться:
Переменная1
Переменная3
Переменная4
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
17. fzt 12.12.14 11:11 Сейчас в теме
оо.. похвальная штука.. а реально эти вещи помогают разработке? я раньше довольном большим числом плагинов к VisualStudio пользовался, тут как-то удручает что нельзя в платформу их встроить.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. fzt 11.12.14 10:10 Сейчас в теме
Одним регулярным выражением это будет непросто.
(?=.*;).*?.(?:\=) выловит переменный по синтаксису (с учетом, что должна быть точка с запятой между операторами
далее удалить комментарии, которые найдет (?:\/).*

настройки парсера:
глобальный,
многострочный,
без учета регистра
3. tomvlad 3860 11.12.14 10:25 Сейчас в теме
(2) fzt, желательно реализовать это именно с помощью одного выражения. При этом строки переменных должны удовлетворять требованиям к именам переменных 1С, а именно - начинаться с буквы или знака подчеркивания, не содержать специальные символы.
4. tomvlad 3860 11.12.14 10:26 Сейчас в теме
Например, такое выражение (?:[^//].*\n|\n|\s^|$|\b)[_ЁА-ЯA-Z][_ЁА-ЯA-Z\d]*(?=\s*=) выдает мне почти требуемый результат, но включает в себя и символы перевода строк.
5. tomvlad 3860 11.12.14 10:28 Сейчас в теме
... и комментарии, необходимо его доработать. Буду рад, если направите на путь истинный.
6. fzt 11.12.14 10:34 Сейчас в теме
7. tomvlad 3860 11.12.14 10:36 Сейчас в теме
8. fzt 11.12.14 11:11 Сейчас в теме
(?:\/.*$|\n|\n|\s^|\s)[_ЁА-ЯA-Z][_ЁА-ЯA-Z\d]*(?=\s*=)
9. tomvlad 3860 11.12.14 11:19 Сейчас в теме
(8) fzt, в тексте есть строка:

// Комментарий = Новый Структура;

Это выражение выдаст результат: " Комментарий"

И по прежнему есть символы перевода строк. А хотелось бы от них избавиться...
10. fzt 12.12.14 06:57 Сейчас в теме
0_х я как-то бред вчера написал, там релаьно работать будут только
(\s)([_ЁА-ЯA-Z][_ЁА-ЯA-Z\d]*)(?=\s*=)
сегодня подумаю про коментарии
11. tomvlad 3860 12.12.14 07:58 Сейчас в теме
(10) fzt, ага, а еще перед именем переменной могут быть не только пробельные символы, но и знаки табуляции...
12. fzt 12.12.14 10:36 Сейчас в теме
короче по моему без lookbehind никак нельзя, нужен Perl парсер, или таки предобрабоотка текста, по вырезанию нахрен оттуда комментов.

    RegExp = Новый COMОбъект("VBScript.RegExp");
    
    RegExp.IgnoreCase = Истина; //Игнорировать регистр
    RegExp.Global = Истина; //Поиск всех вхождений шаблона
    RegExp.MultiLine = Ложь; //Многострочный режим
    
    RegExp.Pattern = "([_а-яА-Я0-9]+)(\s?=\s?.+);?";
    Matches=RegExp.Execute("При мер = ап
	|Переменная1=Новый ТаблицаЗначений;
	|//Переменная2=Новый СписокЗначений; //ojkj
	|Переменная3=Новый Структура;  Переменная4 = Новый Массив; 
	|Переменная6=Новый Структура; //Переменная5 = Новый ДеревоЗначений;");
    ЧислоВхождений=Matches.Count();
    Если ЧислоВхождений>0 Тогда 
        Для к = 0 По ЧислоВхождений-1 Цикл
            Сообщить(Matches.Item(к).SubMatches.item(0));
        КонецЦикла;
    Иначе
        Сообщить("Вхождений шаблона не найдено");
    КонецЕсли;
Показать

Я запарился по самое не могу. Не сталкивался с тем, что RegExp VBS поддерживате не все операторы. Я теперь хочу компоненту которая поддерживает все.
Кстати зачем тебе переменные? что пишеш то?
15. tomvlad 3860 12.12.14 10:59 Сейчас в теме
(12) fzt, хочу написать небольшую контекстную подсказку для КД 2.1, которая была бы попроще чем http://infostart.ru/public/72813/ и в виде одной обработки.

В принципе прототип есть, но хотелось бы реализовать более оптимальный разбор текста. Кстати, идея о "вырезать нахрен оттуда комментарии" мне нравится. Спасибо, если больше никаких вариантов не будет, остановлюсь на ней.
16. fzt 12.12.14 11:04 Сейчас в теме
(15) tomvlad, нужна компонтента, поддерживающая все операторы регулярок.. вроде есть некая "библиотека Константина Ступника бля FAR" как плагин, я не нашел. В теории они есть http://www.regular-expressions.info/lookaround.html
Но Майкрософт же самые умные.. 640кб всем хватило, ну и без регулярок обойдутся.
13. fzt 12.12.14 10:53 Сейчас в теме
не только пробельные символы, но и знаки табуляции...

\s - пробельный символ © т.е. и табуляция

убери пробелы после комментов // и будет щастье

(?!\/\/\.+)\s+([_а-яА-Я0-9]+)\s?=\s?(.+?);
14. fzt 12.12.14 10:56 Сейчас в теме
ой
(?!\/\/)\s+([_а-яА-Я0-9]+)\s?=\s?(.+?);

ТС вейкап! Домой уйду, а там электричества нет, обещали включить через час но я не верю.
17. fzt 12.12.14 11:11 Сейчас в теме
оо.. похвальная штука.. а реально эти вещи помогают разработке? я раньше довольном большим числом плагинов к VisualStudio пользовался, тут как-то удручает что нельзя в платформу их встроить.
18. fzt 12.12.14 15:31 Сейчас в теме
Пасиба.
Понятно. В целом разумеется комменты хочется оставить.
Есть штука которая сделает меня счастливым кодером. Аналог окна code definition в Visual Studio.
Суть:
При наведение текстовой каретки на любую переменную или функцию, в другом окне (у меня это второй монитор допустим) показывается код, где эта переменная объявлена или реализация этой функции. Безумно упрощает работу программиста. Всегда под рукой требуемые параметры функции. Я бы сам реализовал, но пока не довелось работать с окнами платформы.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот