Есть многострочный файл с текстом вида:
"фффффффф
<SYM>111</SYM>
ыыыыыыыы
<SYM>222
333333</SYM>
вввввв
<SYM>444</SYM>
ааааааа
"
Есть функция:
функция мояфункция()
МойПаттерн="(<SYM>)(.*)(<\/SYM>)";
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.MultiLine = Истина;
RegExp.Pattern = МойПаттерн;
ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.Прочитать(мойфайл)
Matches=RegExp.Execute(ТекстФайла);
ЧислоВхождений=Matches.Count();
конецфункции
Какой мне паттерн туда закинуть чтобы получить массив результатов вида
1. 111
2. 222
333333
3. 444
Вышеприведенный шаблон "(<SYM>)(.*)(<\/SYM>)" вполне решает задачи нахождения текста между <SYM> и </SYM> но только если он находится на одной строке, если искомый текст - многострочный, то эта шляпа его не ищет. Причем текст между <SYM> и </SYM> может быть как в 2 строки, так и в 10 - точного количества неизвестно.
Шаблоны вида "(<SYM>)([/s/S]*)(<\/SYM>)" и "(<SYM>)((.|/n|/r)*)(<\/SYM>)" некорректно работают - ищут всё между первым SYM и последним SYM
Есть специалисты по регулярным выражениям?
(5) сколько скобочек, столько и элементов. Вообще обычно ищут по SubMatches - в данном случае нужен SubMatches(1). А избежать - никак. Без создания группы квантификаторов (с помощью скобочек) оператор ИЛИ (|) не работает.