Материал: Повышение эффективности использования СБИС++

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Классы символов

Класс символов соответствует какому-либо одному набору символов (Таблица 2.2). Классы символов состоят из языковых элементов.

Таблица 2.2 - Классы символов

Класс знаков

Описание

Шаблон

Соответствия

[группа_символов]

Соответствует одному символу из группы_символов. По умолчанию при сопоставлении учитывается регистр.

[ae]

"a" в "gray" "a", "e" в "lane"

[^группа_символов]

Отрицание: соответствует одному символу, не входящему в группу_символов. По умолчанию символы в группе_символов зависят от регистра.

[^aei]

"r", "g", "n" в "reign"

[первый-последний]

Диапазон символов: соответствует одному символу в диапазоне от первого допоследнего.

[A-Z]

"A", "B" в "AB123"

.

Подстановочный знак: соответствует какому-либо одному знаку, кроме "\n".

a.e

"ave" в "nave" "ate" в "water"

\p{name}

Соответствует одному символу в общей категории Юникода или в именованном блоке, указанном в параметре имя.

\p{Lu} \p{IsCyrillic}

"C", "L" в "City Lights" "Д", "Ж" в "ДЖem"

\P{name}

Соответствует одному символу, не входящему в общую категорию Юникода или в именованный блок, указанный в параметре имя.

\P{Lu} \P{IsCyrillic}

"i", "t", "y" в "City" "e", "m" в "ДЖem"

\w

Соответствует любому алфавитно-цифровому знаку.

\w

"I", "D", "A", "1", "3" в "ID A1.3"

\W

Соответствует любому символу, не являющемуся буквой.

\W

" ", "." в "ID A1.3"

\s

Соответствует любому знаку пробела.

\w\s

"D " в "ID A1.3"

\S

Соответствует любому знаку, не являющемуся пробелом.

\s\S

" _" в "int __ctr"

\d

Соответствует любой десятичной цифре.

\d

"4" в "4 = IV"

\D

Совпадение с любым   символом, не являющимся десятичной цифрой.

\D

" ", "=", " ", "I", "V" в "4 = IV"


Привязки

Привязки, или атомарные утверждения нулевой ширины, приводят к успеху или сбою сопоставления, в зависимости от текущей позиции в строке, но не предписывают обработчику перемещаться по строке или обрабатывать символы (таблица 2.3).

Таблица 2.3 - Привязки

Утверждение

Описание

Шаблон

Соответствия

^

Соответствие должно начинаться в начале строки.

^\d{3}

"901-" в "901-333-"

$

Соответствие должно обнаруживаться в конце строки или до символа \n в конце строки.

-\d{3}$

"-333" в "-901-333"

\A

Соответствие должно обнаруживаться в начале строки.

\A\d{3}

"901" в "901-333-"

\Z

Соответствие должно обнаруживаться в конце строки или до символа \n в конце строки.

-\d{3}\Z

"-333" в "-901-333"

\z

Соответствие должно обнаруживаться в конце строки.

-\d{3}\z

"-333" в "-901-333"

\G

Соответствие должно обнаруживаться в той точке, где заканчивается предыдущее соответствие.

\G\(\d\)

"(1)", "(3)", "(5)" в "(1)(3)(5)[7](9)"

\b

Соответствие должно обнаруживаться на границе между символом \w (алфавитно-цифровым) и символом \W (не алфавитно-цифровым).

\b\w+\s\w+\b

"them them" в "them theme them them"

\B

Соответствие не должно обнаруживаться на границе \b.

\Bend\w*\b

"ends", "ender" в "end sends endure lender"


Конструкции группирования

Конструкции группирования отображают части выражений регулярных выражений и обычно захватывают части строки входной строки. Конструкции группирования состоят из языковых элементов (таблица 2.4).

Таблица 2.4 - Конструкции группирования

Конструкция группирования

Описание

Шаблон

Соответствия

(часть_выражения)

Выделяет соответствующую часть выражения и назначает ей порядковый номер, отсчитываемый от нуля.

(\w)\1

"ee" в "deep"

(?<имя>часть_выражения)

Выделяет соответствующую часть выражения в именованную группу.

(?<double>\w)\k<double>

"ee" в "deep"

(?<имя1-имя2>часть_выражения)

Задает сбалансированное определение группы.

(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$

"((1-3)*(3-1))" в "3+2^((1-3)*(3-1))"

(?:часть_выражения)

Определяет невыделяемую группу.

Write(?:Line)?

"WriteLine" в "Console.WriteLine()"

(?imnsx-imnsx:часть_выражения)

Применяет или отключает заданные параметры вчасти_выражения.

A\d{2}(?i:\w+)\b

"A12xl", "A12XL" в "A12xl A12XL a12xl"

(?=часть_выражения)

Утверждение положительного просмотра вперед нулевой ширины.

\w+(?=\.)

"is", "ran" и "out" в "He is. The dog ran.The sun is out."

(?!часть_выражения)

Утверждение отрицательного просмотра вперед нулевой ширины.

\b(?!un)\w+\b

"sure", "used" в "unsure sure unity used"

(?<=часть_выражения)

Утверждение положительного просмотра назад нулевой ширины.

(?<=19)\d{2}\b

"99", "50", "05" в "1851 1999 1950 1905 2003"

(?<!часть_выражения)

Утверждение отрицательного просмотра назад нулевой ширины.

(?<!19)\d{2}\b

"51", "03" в "1851 1999 1950 1905 2003"

(?>часть_выражения)

Часть выражения поиска без возврата (или "жадного" поиска).

[13579](?>A+B+)

"1ABB", "3ABB" и "5AB" в "1ABB 3ABBC 5AB 5AC"


Кванторы

Квантор указывает количество вхождений предшествующего элемента (знака, группы или класса знаков), которое должно присутствовать во входной строке, чтобы было зафиксировано соответствие. Кванторы состоят из языковых элементов (таблица 2.5).

Таблица 2.5 - Кванторы

Квантификатор

Описание

Шаблон

Соответствия

*

Соответствует предыдущему элементу ноль или более раз.

\d*\. \d

".0", "19.9", "219.9"

+

Соответствует предыдущему элементу один или более раз.

"be+"

"bee" в "been", "be" в "bent"

?

Соответствует предыдущему элементу ноль или один раз.

"rai? n"

"ran", "rain"

{n}

Предыдущий элемент повторяется ровно n раз.

",\d{3}"

",043" в "1,043.6", ",876", ",543" и ",210" в "9,876,543,210"

{n,}

Предыдущий элемент повторяется минимум n раз.

"\d{2,}"

"166", "29", "1930"

{n,m}

Предыдущий элемент повторяется минимум n раз, но не более, чем m раз.

"\d{3,5}"

"166", "17668" "19302" в "193024"

*?

Предыдущий элемент не повторяется вообще или повторяется, но как можно меньшее число раз.

\d*? \. \d

".0", "19.9", "219.9"

+?

Предыдущий элемент повторяется один или несколько раз, но как можно меньшее число раз.

"be+?"

"be" в "been", "be" в "bent"

??

Предыдущий элемент не повторяется или повторяется один раз, но как можно меньшее число раз.

"rai?? n"

"ran", "rain"

{n}?

Предыдущий элемент повторяется ровно n раз.

",\d{3}?"

",043" в "1,043.6", ",876", ",543" и ",210" в "9,876,543,210"

{n,}?

Предыдущий элемент повторяется по крайней мере n раз, но как можно меньшее число раз.

"\d{2,}?"

"166", "29", "1930"

{n,m}?

Предыдущий элемент повторяется не меньше n и не больше m раз, но как можно меньшее число раз.

"\d{3,5}?"

"166", "17668" "193", "024" в "193024"


Конструкции обратных ссылок

Обратная ссылка позволяет впоследствии идентифицировать ранее найденную соответствующую часть выражения в том же регулярном выражении. Поддерживаемые регулярными выражениями платформы .NET Framework (таблица 2.6).

Таблица 2.6 - Конструкции обратных ссылок

Конструкция обратных ссылок

Описание

Шаблон

Соответствия

\number

Обратная ссылка. Соответствует значению нумерованной части выражения.

(\w)\1

"ee" в "seek"

\k<name>

Именованная обратная ссылка. Соответствует значению именованного выражения.

(?<char>\w)\k<char>

"ee" в "seek"


Конструкции изменения

Конструкции изменения модифицируют регулярное выражение, включая сопоставление по принципу "либо-либо". Такие конструкции состоят из языковых элементов, приведенных в таблице 2.7.

Таблица 2.7 - Конструкции изменения

Конструкция изменения

Описание

Шаблон

Соответствия

|

Соответствует любому элементу, разделенному вертикальной чертой (|).

th(e|is|at)

"the", "this" в "this is the day. "

(?(выражение)да| нет)

Сопоставляется с частью да, если выражение соответствует; в противном случае сопоставляется с необязательной частью нет. выражение интерпретируется как утверждение нулевой ширины.

(?(A)A\d{2}\b|\b\d{3}\b)

"A10", "910" в "A10 C103 910"

(?(имя)да | нет)

Сопоставляется с частью да, если названное имя захвата имеет соответствие; в противном случае сопоставляется с необязательной частью нет.

(?<quoted>")?(?(quoted).+?"|\S+\s)

Dogs.jpg, "Yiska playing.jpg" в "Dogs.jpg "Yiska playing.jpg""


Подстановки

Подстановки - это языковые элементы регулярных выражений, которые поддерживаются в шаблонах замены (таблица 2.8).

Таблица 2.8 - Подстановки

Знак

Описание

Шаблон

Шаблон замены

Входная строка

Результирующая строка

$number

Замещает часть строки, соответствующую группеномер.

\b(\w+)(\s)(\w+)\b

$3$2$1

"один два"

"два один"

${name}

Замещает часть строки, соответствующую именованной группе имя.

\b(?<word1>\w+)(\s)(?<word2>\w+)\b

${word2} ${word1}

"один два"

"два один"

$$

Подставляет литерал "$".

\b(\d+)\s?USD

$$$1

"103 USD"

"$103"

$&

Замещает копией полного соответствия.

(\$*(\d*(\.+\d+)?){1})

**$&

"$1.30"

"**$1.30**"

$`

Замещает весь текст входной строки до соответствия.

B+

$`

"AABBCC"

"AAAACC"

$'

Замещает весь текст входной строки после соответствия.

B+

$'

"AABBCC"

"AACCCC"

$+

Замещает последнюю захваченную группу.

B+(C+)

$+

"AABBCCDD"

$_

Замещает всю входную строку.

B+

$_

"AABBCC"

"AAAABBCCCC"


Для примера работы возьмем строку вида "E-mail: foo@sdo.ru" и вытащим из нее имя пользователя (foo) и имя почтового домена (bar.ru). Следующий код делает это:

private void button2_Click(object sender, EventArgs e)

{

// Регулярное выражениеexpr = "E-mail: (?<account>[\\w\\.]+)\\@(?<domen>[\\w\\.]+)";

// Исходная строкаstr = "lkasdlkjasd E-mail: foo@sdo.com ---1089237asd-- E-mail: bar@sdo.org";

// Текст конечного сообщенияtext = "";

// Применям регулярное выражение к исходной строкеpattern = new Regex(expr,.Compiled | RegexOptions.Singleline);

// Выбираем все совпадения(Match m in pattern.Matches(str))

{(m.Success)

{(text.Length > 0)+= "\n";+= "Account name: " + m.Groups["account"].Value + ", mail domen: " + m.Groups["domen"].Value;

}

}

// Показываем результат.Show(text);

}

Результатом выполнения данного кода будет преобразование текстовой информации в файлы настроки БД (Рисунок 2.17)

Рисунок 2.17 - Файлы преобразования

Таким образом, применив механизм поиска совпадений по шаблону в Word-документах, можно вытаскивать и структурировать любую информацию, которая совпадает с шаблоном.

2.4 Разработка подсистемы учета программных продуктов клиентов

.4.1 Обоснование выбора среды разработки и ее характеристика

Причиной выбора платформы "1С:Предприятие 8" в качестве среды разработки была:

-       наличие у предприятия ООО "Компьютерный аудит" прикладного решения 1С:Управление производственным предприятием, редакция 1.2 на основе 1С:Предприятие;

-       возможность расширения прикладного решения путем разработки дополнительных программных модулей;

-       хранение входящих данных в единой базе данных;

-       высокая скорость разработки прикладных решений в платформе 1С:Предприятие 8.

Также очень существенно то, что выбранная платформа позволяет разработчикам, сопровождающим программистам и пользователям легко изменять, дорабатывать, обновлять программу.

С:Предприятие 8 является универсальной системой автоматизации деятельности предприятия. За счет своей универсальности система 1С:Предприятие 8 может быть использована для автоматизации самых разных участков экономической деятельности предприятия: учета товарных и материальных средств, взаиморасчетов с контрагентами и др.

Основной особенностью системы 1С:Предприятие 8 является ее конфигурируемость. Собственно система 1С:Предприятие 8 представляет собой совокупность механизмов, предназначенных для манипулирования различными типами объектов предметной области. Набор объектов, структуры информационных массивов, алгоритмы обработки информации, соответствующих поставленной задаче, определяет конкретная конфигурация. Вместе с конфигурацией система 1С:Предприятие 8 выступает в качестве уже готового к использованию программного продукта, ориентированного на определенные типы предприятий и классы решаемых задач. Конфигурация создается и сопровождается (поддерживается) штатными средствами системы. Конфигурация обычно поставляется в качестве типовой для конкретной области применения, но может быть изменена, дополнена пользователем системы, а также разработана заново. Система 1С:Предприятие 8 обеспечивает поддержку типовых конфигураций стандартными средствами.