Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 ноя 2024, 07:00

Регулярные выражения

Автор Crusader, 10 дек 2012, 10:40

0 Пользователей и 2 гостей просматривают эту тему.

Dethmontt

Я написал тебе пример реализации...
еще раз:
Execute() выполняет поиск вхождений
Если В начале строки найдено вхождение СтрВыражения, то это ошибка!
Если В конце строки не найдено вхождение СтрВыражения, то это ошибка!

Если оба условия выполнены строка считается корректной...

Я не учел пробелы:
Пример некорректной строки без учета пробелов
"ооораторы ОАО" - некорректная строка! потому что начинается с ООО вхождение СтрВыражения будет найдено
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Crusader

Тестировал обширно твоё решение, долго не мог понять почему работает через раз, но сейчас разобрался. Согласно твоему решению неправильно заполненным признаётся например: "орога ооо", потому что первая буква в слове "о", точно также любая другая буква из нашего набора слов если стоит первой в слове, то сразу заполнение признаётся неправильным.. Вот поэтому я и спрашивал про ^[^"+СтрВыражение+"], точно ли так можно передавать строку в выражение и главное корректно ли это работает? Впринципе мне готовое решение не нужно, мне нужна только строка с правильно составленным регулярным выражением (в части отрицания списка слов). Всё-таки может быть можно написать выражение ^[^"+СтрВыражение+"] как-то по-другому, может быть попроще, но чтоб работало наверняка?

Dethmontt

Спасибо за найденную ошибку.
Немного модифицировал... Проверяйте

Процедура КнопкаВыполнитьНажатие(Кнопка)

    СтрокаВыражения = "ЗАО,ООО,ИП,ОАО";
Наименование = "огага и копыта ООО";
    Масс = РазбитиеСтрокТелефон(Наименование,СтрокаВыражения);
Если Масс Тогда
Сообщить("Корректно");
Иначе Сообщить("Не корректно");
КонецЕсли;
   
КонецПроцедуры

Функция РазбитиеСтрокТелефон(Знач стр,Знач СтрВыражение)

СостряпатьСтрокуВыражение(СтрВыражение);

    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.IgnoreCase = Истина; //Игнорировать регистр
    RegExp.Global = Истина; //Поиск всех вхождений шаблона
    RegExp.MultiLine = Ложь; //Многострочный режим

СтрВыражение = "(?!^("+СтрВыражение+")\s)(\s("+СтрВыражение+")$)";

    RegExp.Pattern = СтрВыражение;
Matches=RegExp.Execute(стр);
F = RegExp.Test(стр);
Возврат F;
   
КонецФункции

Процедура СостряпатьСтрокуВыражение(Строка)

    Строка = СтрЗаменить(Строка,",","|");

КонецПроцедуры




Добавлено: 11 дек 2012, 18:06


блин
Это лишнее
Matches=RegExp.Execute(стр);
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Crusader

Работает, но опять не до конца корректно :( На "ооо рога ооо" выдаёт Истину.
Добавлено: 13 дек 2012, 09:23


Реализовал по другому, через запрос. Спасибо Dethmontt, что уделили внимание.

Dethmontt

Ну хоть так....
Может пригодиться - http://infostart.ru/public/75941/
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (4)

Рейтинг@Mail.ru

Поиск