|
Регулярные выражения | ☑ | ||
---|---|---|---|---|
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) Еще раз спасибо)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |