|
Вопрос по регулярным выражениям VBScript.RegExp | ☑ | ||
---|---|---|---|---|
0
toypaul
гуру
22.12.17
✎
16:39
|
С помощью такого шаблона
ШаблонФункции.Pattern = "\s*?(\S+?)\([\S\s]*?\)\s*?(экспорт)*?.*"; хочу вытащить имя функции и признак экспортный метод или нет. имя вытаскивается, а признак экспортный или нет - не вытаскивается. как правильно написать? Строка имеет вид ИмяФункции(параметры) Экспорт или ИмяФункции(параметры) |
|||
1
toypaul
гуру
22.12.17
✎
16:46
|
получилось так
ШаблонФункции.Pattern = "\s*?(\S+?)\([\S\s]*?\)\s*(экспорт)?.*"; |
|||
2
Tateossian
22.12.17
✎
16:49
|
(0) Regex101 говорит, что вытаскивается
Full match надо смотреть, а не submatches |
|||
3
Tateossian
22.12.17
✎
16:50
|
Я бы еще флаг insensitive поставил
|
|||
4
Timon1405
22.12.17
✎
16:51
|
(1) подкину для теста)
Процедура МояПроцедура (Парам1) |
|||
5
toypaul
гуру
22.12.17
✎
16:52
|
(4) без процедура надо. у меня "процедура" съедается до
|
|||
6
toypaul
гуру
22.12.17
✎
16:53
|
(2) ну может быть VBScript.RegExp логика работы другая
я просто в (0) с ? намудрил уж больно от отсутствия опыта. |
|||
7
toypaul
гуру
22.12.17
✎
16:53
|
insensitive стоял в настройках
|
|||
8
Timon1405
22.12.17
✎
16:53
|
(5) я про пробел(ы)
МояПроцедура (Парам1) |
|||
9
toypaul
гуру
22.12.17
✎
16:55
|
(8) понял. спасибо
|
|||
10
toypaul
гуру
22.12.17
✎
16:55
|
Вот так вот разбивается модуль на функции и процедуры
idТекст = ".*"; idПР = "[ \t]*"; idСтрокаКомментария = "(?://" + idТекст + "$)"; idФункция = "функция([\S\s]*?)конецфункции"; idПроцедура = "процедура([\S\s]*?)конецпроцедуры"; idЛитералСтрока = "(""[^""]*""(?:""[^""]*"")*(?:""[^""]*\s*?|[^""]*(?:""[^""]*"")*"")*?)"; idКомментарий = "(" + idСтрокаКомментария + "(?:\n" + idПР + idСтрокаКомментария + ")*)"; idРазборМодуля = idКомментарий + "|" + idЛитералСтрока + "|" + idПроцедура + "|" + idФункция; idPattern = idРазборМодуля; |
|||
11
toypaul
гуру
22.12.17
✎
16:58
|
Вот так с пробелом после названия функции
ШаблонФункции.Pattern = "\s*?(\S+?)\s*\([\S\s]*?\)\s*(экспорт)?.*"; |
|||
12
Timon1405
22.12.17
✎
17:05
|
цель-то какая? если что, есть обработка разбора модуля
http://catalog.mista.ru/public/78976/ |
|||
13
mszsuz
22.12.17
✎
21:38
|
а такой пример?
Процедура ОбновитьПрогресс(Знач ПрогрессЗначение = 0, Знач ТекстПрогресса = "Выполняется Процедура (%1%)", Знач Показать = Истина) |
|||
14
Сияющий в темноте
22.12.17
✎
21:58
|
пишите уже парсер и не мучайтесь
|
|||
15
ИТ директор
22.12.17
✎
22:26
|
(0) чувак а зачем тебе это понадобилось?
|
|||
16
toypaul
гуру
23.12.17
✎
08:32
|
(12) в принципе то что нужно. цель такая Построение дерева вызова функций
|
|||
17
toypaul
гуру
23.12.17
✎
08:33
|
(13) строки и комментарии должны отсекаться. комментарии точно отсекаются. строки надо еще проверить. мне нужно правильно получать тело функции
|
|||
18
orefkov
23.12.17
✎
09:48
|
(0)
Паш, разбор голого текста модулей регэкспами - дело безблагодатное. И регэкспы получаются монструозными, и всё-равно качественно не работают. То лишнего найдут в комментах, то в кавычках, то чего-то не найдут, что на две строки перенесли. В снегопате есть хороший предварительный парсер модуля, который преобразует текст модуля в вид, удобный для поиска, но снегопат в 8.3.11 пока не работает. Могу до понедельника тебе накидать такой построитель дерева вызовов, если надо. А то от ассемблера уже в глазах рябит, отдохну чутка. |
|||
19
Лефмихалыч
23.12.17
✎
14:55
|
(0) такие вещи регеэкспами не делаются, имхо. Для этих целей конечные автоматы придуманы
|
|||
20
Лефмихалыч
23.12.17
✎
14:57
|
это вот, как раз, тот самый редкий случай, когда у программиста есть проблема, он говорит: "я знаю, как это сделать регэкспами" и - вжух! - у него уже две проблемы
|
|||
21
orefkov
25.12.17
✎
09:59
|
(19)
Строго говоря, регэкспы это и есть конечные автоматы. А для синтакс-разбора просто конечного автомата мало, применяется "конечный автомат с магазинной памятью". |
|||
22
Сияющий в темноте
25.12.17
✎
10:36
|
RegExp - это подмножество конечных автоматов.
Если мы хотим строить разбор синтаксиса, то тут нужно менять дальнейшие режимы автомата по найденным ранее значениям. |
|||
23
toypaul
гуру
25.12.17
✎
10:51
|
С каментами и строками разобрался по простому - очистил их перед основным разбором. Конечные автоматы это конечно круто, но тут из пушки по воробьям.
(18) Да меня тож от 1С подташнивает, поэтому сам и ковыряюсь :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |