По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Гость, Ну, а если у вас текст и зная, что есть раскрывающие и закрывающие скобки, а их количество совпадает, то тогда нужно перебирать текст в цикле, каждую из строк, потом получать количество пар скобок- и в зависимости от этого вызывать функцию
СтрЧислоВхождений()
Это решение
Функция ПолучитьТекстВСкобках(СокрЛП(исходныйТекст))
//исходныйТекст="БлаблаБла[НеБлаНеБлаНеБла]БлаБлаБла";
ДлинаВсегоТекста=СтрДлина(исходныйТекст);
ЛеваяСкобка=Найти(исходныйТекст,"[");
ПраваяСкобка=Найти(исходныйТекст,"]");
ДлинаТекстаНеБла=ПраваяСкобка-ЛеваяСкобка;
Возврат Сред(исходныйТекст,ЛеваяСкобка+1,ДлинаТекстаНеБла-1);
КонецПроцедуры
Это решение
А вот так не пробовал?
//////////////////////////////////////////////////////////// ///////////
//Поиск вхождений подстроки
Процедура RegExp_Exec()
//Для 1С 7.7:
Истина=-1;
Ложь=0;
RegExp = CreateObject("VBScript.RegExp");
RegExp.IgnoreCase = Ложь; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим
RegExp.Pattern = "<[^>]*>"; //Ищем теги HTML
Matches=RegExp.Execute("Это <hr> строка
с тегами HTML");
ЧислоВхождений=Matches.Count();
Если ЧислоВхождений>0 Тогда
Для к = 0 По ЧислоВхождений-1 Цикл
Match = Matches.Item(к);
Сообщить("Найден тег:"+ Match.Value);
КонецЦикла;
Иначе
Сообщить("Вхождений шаблона не найдено");
КонецЕсли;
//Выдаст в окно сообщений:
//Найден тег:<hr>
//Найден тег:
КонецПроцедуры
////////////////////////////////////////////////////////////
//Поиск вхождений подстроки
Процедура RegExp_Exec()
//Для 1С 7.7:
Истина=-1;
Ложь=0;
RegExp = CreateObject("VBScript.RegExp");
RegExp.IgnoreCase = Ложь; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим
RegExp.Pattern = "<[^>]*>"; //Ищем теги HTML
Matches=RegExp.Execute("Это <hr> строка
с тегами HTML");
ЧислоВхождений=Matches.Count();
Если ЧислоВхождений>0 Тогда
Для к = 0 По ЧислоВхождений-1 Цикл
Match = Matches.Item(к);
Сообщить("Найден тег:"+ Match.Value);
КонецЦикла;
Иначе
Сообщить("Вхождений шаблона не найдено");
КонецЕсли;
//Выдаст в окно сообщений:
//Найден тег:<hr>
//Найден тег:
КонецПроцедуры
Это решение
Можно вот так. Результат - массив с отобранными строками,заключенными в []
Я назвал их блоками
из строки "иван[петр]сергей[вася[окно]коля[егор" получится две строки - "петр" и "окно"
отбор "вася" и "егор" если нужно (нужно ли?) корректируется еще парой проверок
Я назвал их блоками
Функция ОтобратьТекстВСкобках(ИсходнаяСтрока)
Результат = Новый Массив; БлокОткрыт=Ложь;
Для А=1 по СтрДлина(ИсходнаяСтрока) Цикл
Буква=Сред(ИсходнаяСтрока,А,1);
Если Буква="[" Тогда
// начинаем новый блок
Блок=""; БлокОткрыт=Истина;
ИначеЕсли (Буква="]") и (БлокОткрыт) Тогда
// Добавляем очередной блок в Результат
Результат.Добавить(Блок); БлокОткрыт=Ложь;
ИначеЕсли БлокОткрыт Тогда
// Добавляем Букву в открытый Блок
Блок=Блок+Буква
//Иначе ничего делать не нужно
КонецЕсли;
КонецЦикла;
Возврат Результат
КонецФункции
Показатьиз строки "иван[петр]сергей[вася[окно]коля[егор" получится две строки - "петр" и "окно"
отбор "вася" и "егор" если нужно (нужно ли?) корректируется еще парой проверок
Функция ОтобратьТекстВСкобках(ИсходнаяСтрока)
Результат = Новый Массив; БлокОткрыт=Ложь;
Для А=1 по СтрДлина(ИсходнаяСтрока) Цикл
Буква=Сред(ИсходнаяСтрока,А,1);
Если Буква="[" Тогда
// запись незавершенного блока (в примере "вася")
Если БлокОткрыт Тогда Результат.Добавить(Блок); КонецЕсли;
// начинаем новый блок
Блок=""; БлокОткрыт=Истина;
ИначеЕсли (Буква="]") и (БлокОткрыт) Тогда
// Добавляем очередной блок в Результат
Результат.Добавить(Блок); БлокОткрыт=Ложь;
ИначеЕсли БлокОткрыт Тогда
// Добавляем Букву в открытый Блок
Блок=Блок+Буква
//Иначе ничего делать не нужно
КонецЕсли;
КонецЦикла;
// запись незавершенного блока (в примере "егор")
Если БлокОткрыт Тогда Результат.Добавить(Блок); КонецЕсли;
Возврат Результат
КонецФункции
Показать
Это решение
Внимание! Не забывайте отмечать решение на ваш вопрос, если оно найдено. Это повысит ваш рейтинг на форуме.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот