Тема 4 - Международный банковский институт

advertisement
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Тема 4
Практическая работа 10
Обработка строк с использованием
регулярных выражений (4 часа)
Цель: освоить принципы построения регулярных выражений и методы
поиска и замены строк с помощью регулярных выражений.
Задачи:
 научиться строить простые регулярные выражения;
 освоить методы проверки введенной информации с использованием
построенных регулярных выражений;
методы замены строк с использованием
выражений.
 освоить
регулярных
Работа с регулярными выражениями
Регулярные выражения — язык шаблонов (на самом деле это математический
термин,
тесно
связанный
с математической
теорией
детерминированных
и недетерминированных конечных автоматов).
В PHP существует два различных механизма для обработки регулярных
выражений:
POSIX-совместимые
и Perl-совместимые
(сокращенно
PCRE).
Их синтаксис во многом похож, однако Perl-совместимые регулярные выражения
более мощные и к тому же работают намного быстрее. Начиная с версии PHP 4.2.0,
PCRE входят в набор базовых модулей и подключены по умолчанию. POSIXсовместимые регулярные выражения включены по умолчанию только в версию PHP
для Windows.
Основные функции для работы с Perl-совместимыми регулярными выражениями:
preg_match(pattern, string, [result, flags])
preg_match_all(pattern,
[flags])>,
string,
result,
где pattern — шаблон регулярного выражения;
string — строка, в которой производится поиск;
result — содержит массив результатов (нулевой элемент массива содержит
соответствие всему шаблону, первый — первому «захваченному» подшаблону
и т. д.);
flags —
необязательный
результаты поиска.
параметр,
определяющий
то, как
упорядочены
Эти функции осуществляют поиск по шаблону и возвращают информацию о том,
сколько раз произошло совпадение. Для preg_match() это 0 (нет совпадений) или
1, поскольку поиск прекращается, как только найдено первое совпадение. Функция
preg_match_all() производит поиск до конца строки и поэтому находит все
совпадения. Все точные совпадения содержатся в первом элементе массива result
у каждой из этих функций (для preg_match_all() этот элемент — тоже массив).
1
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Регулярное выражение (РВ) представляет собой строку. Эта строка состоит
из собственно регулярного выражения (шаблона), выделенного с помощью
специального символа разделителя (это могут быть символы «/», «|», «{», «!»
и т. п.) и модификатора, влияющего на способ обработки РВ.
Например, в регулярном выражении /\d{3}-\d{2}-\d{2}/m символ «/» является
разделителем, \d{3}-\d{2}-\d{2} — непосредственно регулярное выражение
(шаблон), а m — модификатор.
Мощь регулярных выражений порождена в основе своей их способностью
включать в шаблон альтернативы и повторения. Они кодируются в шаблоне
с помощью метасимволов. Метасимвол отличается от любого другого символа тем,
что имеет специальное значение.
Одним из основных метасимволов является обратный слэш «\». Он меняет тип
символа, следующего за ним, на противоположный, т. е. если это был обычный
символ, то он МОЖЕТ превратиться в метасимвол, если это был метасимвол,
то он теряет свое специальное значение и становится обычным символом (это
нужно для того, чтобы вставлять в текст специальные символы как обычные).
Например, символ d в обычном режиме не имеет никаких специальных значений,
но \d есть метасимвол, означающий «любая цифра». Символ «.» в обычном режиме
означает «любой единичный символ», а «\.» означает просто точку.
Еще одно назначение обратного слэша — обозначение генерируемых символьных
типов, таких как:
\d — любая десятичная цифра (0-9);
\D — любой символ, не являющийся десятичной цифрой;
\s — любой пустой символ (пробел или табуляция);
\S — любой символ, не являющийся пустым;
\w — символ, используемый для написания Perl-слов (это буквы, цифры и символ
подчеркивания), так называемый словарный символ;
\W — несловарный символ (все символы, кроме определяемых \w).
Что имеется в виду под «символьным типом»? Просто каждый метасимвол
принимает
значение
(одно)
из класса
возможных
значений,
заданных
автоматически или вручную. Символьные типы, задаваемые пользователем,
описываются с помощью квадратных скобок (подробнее об этом позже). Выше
приведены символьные типы, диапазон значений которых заранее определен
языком программирования.
Пример использования приведенных выше метасимволов:
/\d\d\d
\w\w\w/
plus
\d
is
Это РВ означает: трехзначное число, за которым следует подстрока plus, любая
цифра, затем is и слово из трех словарных символов. В частности, данному
РВ удовлетворяют строки: «123 plus 3 is sum», «213 plus 4 is 217».
Вообще различают два множества метасимволов: те, что распознаются в любом
месте шаблона, за исключением внутренности квадратных скобок, и те, что
распознаются внутри квадратных скобок.
Квадратные скобки [ ] применяются для описания подмножеств и внутри
регулярного выражения рассматриваются как один символ, который может
принимать значения, перечисленные внутри этих скобок. Однако если первым
2
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
символом внутри скобок является ^, то значением символьного класса могут быть
только символы, НЕ перечисленные внутри скобок.
Фигурные скобки определяют конечное количество повторений предшествующего
символа. Например [0-9]{1,2} — любое число, состоящее из одной или двух цифр.
Примеры
 Символьный класс [абвгд] задает один из символов а, б, в, г, д, а класс
[^абвгд] задает любой символ, кроме а, б, в, г, д.
 Если написать [2бул]ки], то это выражение интерпретируется как один
из символов 2, б, у, л, за которым следует строка ки], потому что первая
встретившаяся закрывающая квадратная скобка (разбор происходит слева
направо) заканчивает определение символьного класса. То есть это
РВ совпадет с одной из строк 2ки], бки], уки] или лки].
 С помощью РВ [0-9А-Яа-я] можно задать любую букву русского алфавита или
цифру.
Метасимволы, распознаваемые вне квадратных скобок, можно разделить
на группы следующим образом: определяющие положение искомого текста
в строке, связанные с подвыражениями, ограничивающие символьный класс,
квантификаторы и перечисление альтернатив.
Метасимволы ^ и $ определяют место поиска совпадений. Тот же символ ^,
стоящий просто в начале РВ, означает, что совпадения ищутся в начале строки.
Символ $, стоящий в конце РВ означает, что совпадения ищутся только в конце
строки.
Регулярное выражение /\d\d/m может быть сопоставлено следующим подстрокам:
11, 22, 33. Регулярное выражение /^\d\d/m найдет только 11. Регулярное
выражение /\d\d$/m найдет только 33.
Применение:
$s=preg_match("/^[a-zA-Z09]+$/", $str);
If ($s)echo “выражение найдено”;
Else echo “Не найдено”;
Задание 1
При регистрации участников конференций или других официальных
мероприятий часто необходимо задать фамилию и инициалы участника.
Предполагаем, что конференция проходит в России и требуется разработать
регулярное выражение, которое позволяет проверить правильность заполнения
поля «Фамилия и инициалы», которое должно заполняться в следующем формате
Андреев
Н.А.
Крылова
Т.Н.
Сначала анализируемые строки задавать
с присвоенным конкретным значением.
3
в виде
символьных
переменных
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
После отладки данного регулярного выражения оформить его в виде функции,
в которую передается в качестве аргумента символьная строка, а возвращается
Истина или Ложь в зависимости от результатов проверки.
Скопировать форму регистрации участников конференции из работы 9, сохранить
ее под
новым
именем
и применить
к анализу
соответствующего
поля
разработанную функцию проверки корректности введенной информации.
Рис. 1. Форма регистрации участников конференции
При обнаружении несоответствия требуемому шаблону введенной строки
сообщить пользователю о данном нарушении, конкретизируя именно данное поле
и сохранив все остальные записи без изменения.
Напомним, что класс символов,
представляется следующим образом:
соответствующих
русскому
алфавиту,
[ А-Яая]
Знак точка — может играть роль метасимвола, поэтому при включении его
в шаблон мы должны его заэкранировать обратным слэшем.
\
Между фамилией и инициалами необходим пробел, при формировании шаблона
он включается просто как символ, без дополнительных обрамлений.
4
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Инициалы обычно пишутся с большой буквы. Класс символов, которые
соответствуют заглавным буквам русского алфавита, можно изобразить следующим
образом:
[ АЯ]
Заканчиваться искомое выражение должно точкой.
Самый простой шаблон можно представить следующим образом:
/^[А-Яа-я]+
Я]\.$/
[А-Я]\.[А-
Выполните проверки с данным шаблоном.
Модифицируйте шаблон таким образом, чтобы он проверял, что первая буква
фамилии должна быть заглавная, а остальные строчные.
Оформите проверку в виде функции check _ fio ($ fio), которая возвращает
1, если проверка прошла корректно и 0 в противном случае.
Функцию сохраните в файле check. inc, в котором мы будем собирать библиотеку
проверочных функций и постепенно будем ее дополнять.
Файл с библиотекой в обработчик формы подключить операцией INCLUDE ().
При корректном завершении проверки выводить соответствующее сообщение,
а вот если проверка прошла некорректно, то кроме сообщения выводить ссылку
на возврат к исходной форме.
Рис. 2. Результат проверки при некорректном вводе
Проверьте работоспособность созданных скриптов.
Задание 2
В задании 1 мы видим, что при некорректном вводе пользователю приходится
заново заполнять всю форму. Если в форме много вводимых данных, это очень
неудобно. Необходимо сделать таким образом, чтобы при повторном вводе все
ранее введенные корректные данные сохранились в форме, а вводить заново
5
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
нужно было бы только то, что введено некорректно. Для этого надо научиться
передавать в форму уже введенные значения. Разработаем функцию вывода нашей
формы. Для того чтобы сократить количество передаваемых в функцию
параметров, оформим их в виде массива.
Ключом в массиве будут имена переменных, а значения соответственно будут
являться выбранными значениями.
В исходном начальном состоянии все значения пусты. Так как кроме простых
полей у нас задаются поля в виде выбора из массива, то исходный массив у нас
будет как минимум двухуровневым.
Опишем данный массив:
$ a = array (‘ fio '=>'',
‘ section '=> array (
array (0,1,‘Прикладная информатика'),
array
(0,2,
менеджмент'),
‘Информационный
array (0,3,‘Корпоративные ИС'),
array (0,4‘, Банковские ИС')),
‘dokl' => ‘',
‘sex' =>'')))
Теперь создадим функцию вывода формы в соответствии со значениями массива.
Так как у нас в форме есть несколько полей, значения которых могут быть
переданы в массиве, нам необходимо против выбранных значений поставить
соответствующие параметры в HTML-коде.
Будем считать, что если выбрана уже конкретная секция, то первая цифра
соответствующего подмассива равна 1. Вторая цифра соответствует номеру секции
и именно этот номер анализируется при обработке данных.
Для
облегчения
формирования
символьной
строки,
соответствующей
сформированной форме, введем несколько дополнительных переменных и зададим
им значения, используя тернарный оператор. При выборе конкретного значения
поля «выпадающий список», это значение в теге < option > помечается признаком
selected.
$s1=$a['section'][0][0]==1?'selected':
'';
$s2=$a['section'][1][0]==1?'selected':
'';
$s3=$a['section'][2][0]==1?'selected':
'';
$s4=$a['section'][3][0]==1?'selected':
'';
При выборе полей типа “ radio ” — они помечаются признаком “ checked ”.
Введем еще
соответственно:
4 переменные
для
полей
6
dokl
(докладчик)
и sex
(пол)
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
$d1=$a['dokl']==1?' checked':'';
$d2=$a['dokl']==0?' checked':'';
$x1=$a['sex']=='
checked':'';
ж
'?
'
$x2=$a['sex']=='
checked':'';
м
'?
'
Ориентировочный код функции вывода регистрационной формы представлен
на рис. 3:
Рис. 3. Функция вывода формы
Тогда алгоритм вывода
представлено на рис. 4.
регистрационной
формы
может
выглядеть,
как
Для того чтобы проверить, выводилась ли раньше форма, можем воспользоваться
анализом
переменной
$
s, которая
соответствует
нажатию
кнопки
«Зарегистрировать» в форме. Если эта переменная была определена — isset ($
s) — Истинно, то значит форма уже выводилась и надо выполнять анализ
7
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
и присвоение элементам массива $ a соответствующие значения, в противном
случае мы выводим форму с исходным состоянием массива.
При подобном режиме работы мы заставляем пользователя заново вводить только
неверно введенные данные.
Рис. 4. Алгоритм формы регистрации
При подобном режиме работы мы пользователю оставляем все выбранные
им элементы, а просим повторно ввести только ФИО:
8
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 5. Форма с частично заполненными полями в соответствии с выбором пользователя
Задание 3
Дополнить форму регистрации вводом телефона, разработав для него регулярное
выражение и соответственно функцию проверки, которая позволяет проверить
правильность введенного номера.
Для облегчения контроля можно создать в форме 2 поля: городской или
федеральный номер и номер мобильного телефона, и для каждого написать
регулярное выражение и функцию проверки.
При регистрации считать, что участник конференции должен обязательно
оставить для связи хотя бы один номер телефона: либо городской, либо
мобильный, поэтому если не заданы оба номера телефона, то вывести форму
повторно с соответствующими комментариями о заполнении полей формы.
Предполагаем, что мобильный телефонный номер в формате:




8-905-455-56-19
или в формате +7 -905-455-56-19
или в формате 89054555619
или в формате+79054555619
Городской телефонный номер семизначный и может быть задан в следующих
форматах:
 756-99-01
 7569901
 756.99.01
9
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
При разработке регулярного выражения необходимо помнить, что кроме того,
существует класс символов \ d, который соответствует всем цифрам. Однако нас
интересует не только то, что вся строка номера телефона должна состоять только
из цифр, но и возможность разделения ее специальными символами, а также
наличие специальных начальных символов для обозначения мобильных телефонов.
Если мы хотим задать количество повторений символов данного класса в строке,
то нам надо воспользоваться метасимволами — фигурными скобками, в которых
задается количество повторений символа, относящегося к предыдущему классу.
Напомним, что стандартные классы для Perl-совместимых функций регулярных
выражений следующие:
\w — класс алфавитно-цифровых символов;
\W — все, кроме алфавитно-цифровых символов;
\d — любая цифра;
\D — все, что не относится к классу \d;
\b — граница слов;
\B — все, кроме границ слов;
\s — все пропуски — знаки табуляции, пробелы, переводы строки;
\S — все, что не относится к классу \s.
Так, например, если для того, чтобы найти все правильные последовательности
строк вида





1-22
6-77
8-00
1-00
и т.д.
можно создать следующий шаблон поиска:
/^\ d
{2}$/
{1}-\
d
Этот шаблон означает, что строка начинается всегда с одного символа, входящего
в класс символов цифр:
^ \
{1}
d
Далее следует обязательно дефис, который здесь является
а не разделителем класса, а потом должны следовать две цифры:
символом,
\
d{2}
и на этом строка должна заканчиваться, о чем свидетельствует символ $ в конце
шаблона.
Если мы хотим расширить виды разделителей в проверяемых выражениях,
например, группы символов у нас могут быть разделены как дефисом, так и точкой,
то надо включить альтернативную последовательность в шаблон.
10
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Альтернатива записывается в шаблоне в виде последовательности вариантов,
заключенных в круглые скобки и разделенных вертикальной чертой. Например:
(|.)
Если разделитель обязателен, то после записи вариантов ничего не ставится,
и в этом случае мы получаем следующий шаблон:
/^\ d {1}(. |-)\ d
{2}$/
Данному шаблону будут соответствовать последовательности строк:




1.33
2-44
0.99
5-44
Но число из трех цифр без разделителей не подойдет под шаблон. Если мы хотим
расширить
шаблон
и включить
в него
возможность
представить
просто
последовательность
из трех
подряд
идущих
цифр,
то нам
необходимо
к альтернативным символам разделителей добавить специальный символ,
указывающий, что повторение возможно 0 или 1 раз указанного перед ним
символа. Для этого можно воспользоваться сокращенными квантификаторами.
Сокращенные квантификаторы задают наиболее используемые количественные
отношения (повторения). Они придуманы для удобства, чтобы не перегружать
и без того сложные выражения лишним синтаксисом.
Исходя из исторических традиций три наиболее
квантификатора имеют следующие обозначения:
часто
встречающихся
* эквивалентно {0,} — т. е. это ноль и более повторений;
+ эквивалентно {1,} — т. е. это одно и более повторений;
? эквивалентно {0,1} — т. е. это ноль или одно повторение.
Есть еще один важный момент, на который стоит обратить внимание при изучении
квантификаторов. По умолчанию все квантификаторы «жадные», они стараются
захватить как можно больше повторений элемента. То есть если указать, что
символ должен повторяться один и более раз (например, с помощью *), совпадение
произойдет со строкой, содержащей наибольшее число повторений указанного
символа. Это может создать проблемы, например, при попытке выделить
комментарии в программе на языке Cи или PHP. Комментарии в Cи и PHP
записываются между символами /* и */, внутри которых тоже могут встречаться
символы * и /. И попытка выявить Си-комментарии с помощью шаблона
/\*.*
\*/
в строке
/* первый комментарий
*/
не комментарий
11
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
/* второй комментарий
*/
не увенчается успехом из-за «жадности» элемента «.*» (будет найдена также
строка «не комментарий»).
Для решения этой проблемы нужно написать знак вопроса после квантификатора.
Тогда он перестанет быть «жадным» и попытается захватить как можно меньшее
число повторений элемента, к которому он применен (квантификатор применяется
к элементу, что стоит перед ним). Так что шаблон
/\*.*?
\*/
успешно выделяет Си-комментарии.
Но лучше всего пользоваться более точным построением шаблона.
Для наших целей подойдет символ вопросительного знака ? в качестве
квантификатора. Он ставится за проверяемым символом или символьным
выражением. В этом случае наш шаблон преобразуется к следующему виду:
/^\d{1}(.|)?\d{2}$/
Ну вот, мы проработали начало формирования шаблона для телефона. Вам
осталось совсем немного его доделать, чтобы он соответствовал городским номерам
телефонов. Для мобильных номеров необходимо еще включить дополнительную
проверку на стандартный начальный символ или последовательность символов.
Теперь пишем функции и отлаживаем их при проверке введенных данных
в форме.
Задание 4
Дополнить форму регистрации вводом адреса электронной почты и при этом
разработать регулярное выражение для проверки корректности ввода данного
поля.
Будем исходить из того, что адрес должен иметь вид something@server.com. Как
видим, у адреса две составляющие: имя пользователя и имя домена, которые
разделены знаком @. В имени пользователя могут присутствовать буквы нижнего
и верхнего регистров, цифры, знаки подчеркивания и минуса, точки. Для проверки
разделителя между именем пользователя и именем домена в выражение требуется
добавить +@. Таким образом, регулярное выражение, проверяющее имя
пользователя и наличие разделителя, имеет следующий вид:
"/[0-9a-z_]+@[0-9az_^\.]"
Для проверки доменного имени добавляем такое выражение:
"\.[az]{2,3}/i"
12
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Объединяя эти шаги, получаем следующее регулярное выражение для проверки
адресов электронной почты:
"/[0-9a-z_]+@[0-9a-z_^\.]+\.[az]{2,3}/i"
Создать функцию для проверки корректности ввода адреса электронной почты,
добавить ее в созданную ранее библиотеку проверочных функций.
Отладить вводимую форму регистрации с добавленным полем адреса электронной
почты.
Задание 5
Пользователь при регистрации вводит свое условное имя — ник. На нашем сайте
существуют ограничения, ник должен содержать только латинские буквы
и арабские цифры, начинаться обязательно с буквы. Количество символов
не ограничено. Напишите регулярное выражение, соответствующее данному
требованию, и проверьте его работу.
Задание 8
Правильным идентификатором на языке SQL является последовательность
символов, начинающаяся с латинской буквы и содержащая произвольное число
латинских букв и цифр и не содержащая специальных символов: *,., /,-.
Напишите регулярное выражение, которое проверяет введенный идентификатор
на правильность.
Задание 10
Написать
в формате
dd.
yyyy.
регулярное
выражение
для
проверки
даты
рождения,
mm.
Разделителями могут быть — точки и дефисы.
Можно написать простой шаблон типа
/
^[0-9]{2}\.[0-9]{2}\.[09]{4}$/
Этот шаблон выделит все следующие строки, как корректные
 01.02.1999
 12.03.1989
 23.12.1979
Но он также воспримет корректными и такие строки:
 99.33.9998
 88.11.8765
 33-34-0005
13
заданной
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Нас, конечно,
ограничения:
такой
шаблон
не устроит.
Тогда
давайте
сформулируем
1. Первые две цифры соответствуют дню месяца и могут изменяться от 01 до 31.
2. Вторые две цифры соответствуют месяцу и могут изменяться от 01 до 12,
и никак иначе.
3. Последние 4 цифры соответствуют нашему реальному веку и возможно
прошлому веку, поэтому могут изменяться в пределах от 1900 до текущего
года.
Для такой точной формулировки нам потребуются условные подвыражения.
Как в любом языке программирования, в РВ существуют условные конструкции.
Применяются они к подвыражениям. То есть можно заставить процессор
РВ выбирать подшаблон в зависимости от условия или выбирать между двумя
альтернативными шаблонами в зависимости от результата утверждения или
от того, совпал ли предыдущий захваченный подшаблон. Существуют две формы
условных подвыражений:
(?(условие)шаблон_выполняемый_если_условие_верн
о)
(?(условие)шаблон_если_условие_верно
|шаблон_если_условие_неверно)
Существует два типа условий. Если текст между круглыми скобками состоит
из последовательности цифр, то условие удовлетворяется, если захваченное
подвыражение с этим номером ранее совпало.
(\ ()? [^()]+ (?(1)
\))
Первая
часть
этого
регулярного
выражения
опционально
совпадает
с открывающейся
круглой
скобкой,
и если
этот
символ
присутствует,
то устанавливает его как первое захваченное подвыражение.
Вторая часть совпадает
в круглые скобки.
с одним
или
более
символами,
не заключенными
Третья часть РВ — это условное подвыражение, которое проверяет, совпало ли
первое множество скобок или нет (попалась ли нам в строке открывающая круглая
скобка). Если попалась, т. е. объект (строка) начинается с символа «(», то условие
верно и вычисляется условный шаблон, а именно, требуется наличие закрывающей
круглой скобки. В противном случае подшаблон ни с чем не совпадает.
Если условие — непоследовательность цифр, то оно должно быть утверждением.
Это может быть позитивное или негативное «смотрящее вперед» или «смотрящее
назад» утверждение.
(?(?=[^a-z]*[a-z])\d{2}-[a-z]{3}-\d{2}
\d{2})
|\d{2}-\d{2}-
Условие здесь — позитивное «смотрящее вперед» утверждение. Оно совпадает
с любой последовательностью не букв, после которых идет буква. Другими
словами, оно проверяет присутствие хотя бы одной буквы в строке для поиска.
14
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Если буква найдена, то производится сравнение по первому альтернативному
варианту шаблона (\d{2}-[a-z]{3}-\d{2}), иначе — по второму (\d{2}-\d{2}\d{2}). Этому шаблону удовлетворяют строки двух типов: dd-aaa-dd или dd-dd-dd,
где d — любая цифра; a — любая буква.
Построить условный шаблон, который проверяет, для какого века формируется
дата, и соответственно — последние 2 цифры года. Если для прошлого, они могут
быть в пределах от 20 до 99, если в текущем, то они могут быть от 00 до 08.
15
Download