Имя: Пароль:
1C
1С v8
Регулярные выражения
0 Bartezz
 
15.05.13
10:06
Здравствуйте. Возникла проблема при использовании регулярных выражений, необходимо парсить файл структура которого примерно такая
[Наименование_1]
..Свойство1..
..Свойство2..
....
..Свойство%n..
[Наименование_2]
...........
Количество свойств всегда разное, так вот необходимо парсить все данные от Наименования_1 до Наименования_2.
Использую вот такой шаблон(то что не спарсится последний блок не такая проблема сейчас):
RegExp.Pattern = "(\[.*\].*\[)";
Однако  символ "." не учитывает переносы строк, пробую добавить модификатор "s", чтоб в итоге было:
RegExp.Pattern = "(?s)(\[.*\].*)";
в этом случае выбивает ошибку что произошла исключительная ситуация. Как вообще можно использовать модификаторы в 1с? Может в RegExp необходимо что то дополнительное дописать?
1 vde69
 
15.05.13
10:07
лучше использовать reginifiles или подобное, это типовой ini файл
2 pumbaEO
 
15.05.13
10:07
Файлы настроек обычно парсятса линейно.
3 Bartezz
 
15.05.13
10:12
(1) что это вообще такое и с чем это едят?
(2) что значит линейно? построчно в смысле? Если да, то из за различного количества свойст будет проблемно сопоставить результат парсинга свойств к наименованию
4 Bartezz
 
15.05.13
10:13
Поправлю, что наименований разумеется N-ное число (скажем 1000)
5 drcrasher
 
15.05.13
10:14
ТЗ: наименование, списокСвойств(=список значений)
читаешь файл построчно и наслаждаешься результатом
6 Кирпич
 
15.05.13
10:15
(0) забудь на время умные слова про парсинг и регулярные выражения и просто перебери все строки в твоём файле
7 Bartezz
 
15.05.13
10:16
(5) Так конечно можно, но так не интересно:)
8 Bartezz
 
15.05.13
10:17
В любом случае интересует вопрос использования модификаторов в регулярных выражениях. Допустим эта проблема решена, но модификаторы то как, как быть с модификаторами
9 Кирпич
 
15.05.13
10:19
(8) щас в хелпе почитаем и расскажем. подожди 5 минут.
10 Дядя Вова
 
15.05.13
10:20
11 Bartezz
 
15.05.13
10:24
(9) в хелпе то такого найти не получится
(10) способ как в php не работает, там немного по-другому используются модификаторы, так в 1с не получается
12 pumbaEO
 
15.05.13
10:27
Не поверишь но в (0) не 1С-ные регулярные выражения... Нет в 1С регулярных выражений.

p.s.: на поверхности.
13 drcrasher
 
15.05.13
10:34
так, чисто поржать: http://regexpr.ru/
14 Bartezz
 
15.05.13
10:39
(12) верю, но пользоваться же ими приходится в 1с, если читать справку VB то есть модификатор RegExp.SingleLine (аналог "s"), здесь же использовать его не удается
15 Bartezz
 
15.05.13
11:03
Резюмируя можно сказать, либо никак, либо никто не знает. Варианты использования модификаторов через:
RegExp.
ограничены всего тремя:
RegExp.MultiLine
RegExp.IgnoreCase
RegExp.Global
Использование модификаторов в шаблоне по принципу
RegExp.Pattern = "(?s)(?U)";
Вызывает исключительную ситуацию
16 oleg_km
 
15.05.13
11:13
(15) Вроде в 8.3 планируются, но наверное как обычно будут недоделанные. orefkov вроде распространял библиотеку, дающую доступ к регулярным выражениям.
17 orefkov
 
15.05.13
11:18
(0)
"(\[.*\][\s\S]*?\[)";
или
"(\[.*\][^\[]*?\[)";
18 Bartezz
 
15.05.13
11:22
(17) ведь точно:) спасибо, не надо было искать легких путей))
19 orefkov
 
15.05.13
11:25
Хотя, с таким регекспом через одну секцию выдернет, потому что  начало следующей секции захватит, надо последний [ на look-ahead заменить:

\[.*\][\s\S]*?(?=\[|$)
20 orefkov
 
15.05.13
11:27
Вот еще проще:
\[.*\][^\[$]*
21 orefkov
 
15.05.13
11:30
А флаги (?s) - это надо http://snegopat.ru/forum/viewtopic.php?f=5&t=444
22 Bartezz
 
15.05.13
11:31
(21) Еще раз спасибо)