Получить из строки нужный отрывок

1. Гость 09.03.13 08:26
Всем здравствуйте! помогите пожалуйста получить из строки нужный отрывок который обозначен квадратными скобками, например имеем строку вида : "бла бла бла [нужный текст]бла бла". Из нее получить только "Нужный текст".
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Гость 09.03.13 08:48
и таких вхождений "[]" может быть сколько угодно, желательно получить их все
4. deniseek77 86 09.03.13 10:08 Сейчас в теме
(2) Гость, Ну, а если у вас текст и зная, что есть раскрывающие и закрывающие скобки, а их количество совпадает, то тогда нужно перебирать текст в цикле, каждую из строк, потом получать количество пар скобок-
СтрЧислоВхождений()
и в зависимости от этого вызывать функцию
3. deniseek77 86 09.03.13 09:21 Сейчас в теме
Функция ПолучитьТекстВСкобках(СокрЛП(исходныйТекст))
	//исходныйТекст="БлаблаБла[НеБлаНеБлаНеБла]БлаБлаБла";
	ДлинаВсегоТекста=СтрДлина(исходныйТекст);
	ЛеваяСкобка=Найти(исходныйТекст,"[");
	ПраваяСкобка=Найти(исходныйТекст,"]");
	ДлинаТекстаНеБла=ПраваяСкобка-ЛеваяСкобка;
	Возврат Сред(исходныйТекст,ЛеваяСкобка+1,ДлинаТекстаНеБла-1);
КонецПроцедуры
Rustavelli; pyrkin_vanya; +2 Ответить
5. anmal 19 09.03.13 23:12 Сейчас в теме
А вот так не пробовал?

////////////////////////////////////////////////////////////­///////////
//Поиск вхождений подстроки
Процедура 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>
//Найден тег:

КонецПроцедуры
6. shatshat 11.03.13 23:04 Сейчас в теме
Можно вот так. Результат - массив с отобранными строками,заключенными в []
Я назвал их блоками

Функция ОтобратьТекстВСкобках(ИсходнаяСтрока)
	Результат = Новый Массив; БлокОткрыт=Ложь;
	Для А=1 по СтрДлина(ИсходнаяСтрока) Цикл
		Буква=Сред(ИсходнаяСтрока,А,1);
		Если Буква="[" Тогда
			// начинаем новый блок
			Блок=""; БлокОткрыт=Истина;
		ИначеЕсли (Буква="]") и (БлокОткрыт) Тогда
			// Добавляем очередной блок в Результат
			Результат.Добавить(Блок); БлокОткрыт=Ложь;
		ИначеЕсли БлокОткрыт Тогда		
			// Добавляем Букву в открытый Блок 
			Блок=Блок+Буква
		//Иначе ничего делать не нужно	
		КонецЕсли;
	КонецЦикла;	
	Возврат Результат
КонецФункции	
Показать


из строки "иван[петр]сергей[вася[окно]коля[егор" получится две строки - "петр" и "окно"
отбор "вася" и "егор" если нужно (нужно ли?) корректируется еще парой проверок

Функция ОтобратьТекстВСкобках(ИсходнаяСтрока)
	Результат = Новый Массив; БлокОткрыт=Ложь;
	Для А=1 по СтрДлина(ИсходнаяСтрока) Цикл
		Буква=Сред(ИсходнаяСтрока,А,1);
		Если Буква="[" Тогда
			// запись незавершенного блока (в примере "вася")
                        Если БлокОткрыт Тогда Результат.Добавить(Блок); КонецЕсли;  
                        // начинаем новый блок
			Блок=""; БлокОткрыт=Истина;
		ИначеЕсли (Буква="]") и (БлокОткрыт) Тогда
			// Добавляем очередной блок в Результат
			Результат.Добавить(Блок); БлокОткрыт=Ложь;
		ИначеЕсли БлокОткрыт Тогда		
			// Добавляем Букву в открытый Блок 
			Блок=Блок+Буква
		//Иначе ничего делать не нужно	
		КонецЕсли;
	КонецЦикла;	
	// запись незавершенного блока (в примере "егор")
        Если БлокОткрыт Тогда Результат.Добавить(Блок); КонецЕсли;  
	Возврат Результат
КонецФункции	
Показать
Внимание! Не забывайте отмечать решение на ваш вопрос, если оно найдено. Это повысит ваш рейтинг на форуме.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот