Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

задание [14] Контрольные вопросы к лабораторной работе 6 ЛАБОРАТОРНАЯ РАБОТА 6 Регуляр

Работа добавлена на сайт samzan.net:


Оглавление

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

[2] Цель работы:  

[3] Теоретическая часть

[4] Основные понятия

[5] Общее описание

[6] Специальные символы (метасимволы)

[7]
Метасимволы поиска совпадений

[8]
Количественные метасимволы

[9] Метасимволы позиционирования

[10] Некоторые методы для работы с шаблонами

[11] Запоминание найденных подстрок

[12] Модификаторы поиска

[13]
Практическое задание

[14] Контрольные вопросы к лабораторной работе 6


ЛАБОРАТОРНАЯ РАБОТА №  6

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

Цель работы:  

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

Теоретическая часть

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

Основные понятия

Регулярное выражение (regular expression) — средство для обработки строк или последовательность символов, определяющая шаблон текста.

Модификатор — предназначен для "инструктирования" регулярного выражения.

Метасимволы — специальные символы, которые служат командами языка регулярных выражений.

Общее описание

Регулярное выражение задаётся как обычная переменная, только вместо кавычек используется слеш, например:

var reg=/рег_выражение/

Регулярное выражение может состоять из обычных символов; в этом случае оно будет соответствовать заданной комбинации символов в строке. Например, выражение /счет/ соответствует выделенным подстрокам в следующих строках: "счетчик", "пересчет", "счеталка".

Регулярные выражения представляют собой образцы для поиска заданных комбинаций символов в текстовых строках (такой поиск называется сопоставлением с образцом). Существует два способа присваивания переменным регулярных выражений:

  •  использование инициализатора объекта: var re = /pattern/switch?
  •  использование конструктора RegExp:

var re = new RegExp("pattern"[,"switch"]?).

здесь pattern - регулярное выражение, а switch - необязательные опции поиска.

Инициализаторы объекта, например, var re = /ab+c/, следует применять в тех случаях, когда значение регулярного выражения остается неизменным во время работы сценария. Такие регулярные выражения компилируются в процессе загрузки сценария и, следовательно, выполняются быстрее.

Вызов конструктора, например, var re = new RegExp("ab+c"), следует применять в тех случаях, когда значение переменной будет меняться. Если вы собираетесь использовать регулярное выражение несколько раз, то имеет смысл скомпилировать его методом compile для более эффективного поиска образцов.

Примечание: регулярное выражение не может быть пустым: два символа // подряд задают начало комментария. Поэтому для задания пустого регулярного выражения используйте выражение /.?/.

Регулярные выражения используются методами exec и test объекта RegExp и методами match, replace, search и split объекта String. Если необходимо просто проверить, содержит ли данная строка подстроку, соответствующую образцу, то используются методы test или search. Если же необходимо извлечь подстроку (или подстроки), соответствующие образцу, то используются методы exec или match. Метод replace обеспечивает поиск заданной подстроки и замены ее на другую строку, а метод split позволяет разбить строку на несколько подстрок, основываясь на регулярном выражении или обычной текстовой строке.

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

Допустим, нашей задачей является замена всех букв "р" (малых и заглавных) на латинскую большую букву "R" в словосочетании Регулярные выражения.

Создаём шаблон var reg=/р/ и, используя метод replace,  осуществляем задуманное

 <script language="JavaScript">

  var str="Регулярные выражения"

  var reg=/р/

  var result=str.replace(reg, "R")

  document.write(result)

 </script>

  

В результате получим строку «РегуляRные выражения», замена произошла только на первом вхождении буквы "р" с учётом регистра. Но под условия нашей задачи этот результат не подходит. Для решения задачи полностью понадобятся модификаторы "g" и "i", которые могут использоваться как отдельно, так и совместно. Эти модификаторы ставятся в конце шаблона регулярного выражения, после слэша, и имеют следующие значения:

  •  модификатор "g" — задаёт поиск в строке как "глобальный", т.е. в нашем случае замена произойдет для всех вхождений буквы "р". Теперь шаблон выглядит так: var reg=/р/g, подставив его в код

 <script language="JavaScript">

  var str="Регулярные выражения"

  var reg=/р/g

  var result=str.replace(reg, "R")

  document.write(result)

 </script>

  

получим строку «РегуляRные выRажения».

  •  модификатор "i" — задаёт поиск в строке без учёта регистра, добавив этот модификатор в наш шаблон var reg=/р/gi, после выполнения скрипта получим искомый результат нашей задачи -- «RегуляRные выRажения».

Специальные символы (метасимволы)

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

  •  метасимволы поиска совпадений.
  •  количественные метасимволы.
  •  метасимволы позиционирования.


Метасимволы поиска совпадений 

\b

Означает границу слова, позицию между словом и пробелом

\B

Означает границу пробела, позицию между пробелом и словом

\c

Совпадает с управляющем символом вида "Ctrl"+"символ"

\d

Любая цифра

\D

Любой нецифровой символ

\f

Символ перевода страницы

\n

Символ новой строки

\r

Символ возврата каретки

\s

Одиночный пустой символ, соответствует символу пробела

\S

Одиночный непустой символ, любой один символ за исключением пробела.

\t

Табуляция

\v

Вертикальная табуляция

\w

Буква, цифра или подчеркивание

\W

Не буква, цифра или символ подчёркивания.

.

Любой символ, любые знаки, буквы, цифры и т.д. (кроме \n – новая строка)

[ ]

Набор символов, задаёт условие, при котором шаблон должен выполняться при любом совпадении символов заключенных в квадратные скобки

[^ ]

Набор не входящих символов, задаёт условие, при котором шаблон не должен выполняться при любом совпадении символов заключенных в квадратные скобки.

x|y

Соответствует x или y.

(подвыражение)

Ищет подвыражение и сохраняет в памяти найденную группу символов

Например:

[xyz]  - соответствует любому символу из заключенных в квадратные скобки.

[^xyz]  - соответствует любому символу, кроме заключенных в квадратные скобки.

[a-z]  -соответствует любому символу в указанном диапазоне.

[^a-z]  -соответствует любому символу, кроме лежащих в указанном диапазоне.


Количественные метасимволы 

*

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

+

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

?

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

{n}

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

{n, }

Означает, что предшествующий символ должен встретиться в строке n или большее количество раз

{n,m}

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

 Метасимволы позиционирования 

^

В начале  строки

$

В конце строки

Некоторые методы для работы с шаблонами 

replace - данный метод был уже использован в самом начале, он предназначен для поиска образца и замены найденной подстроки на новую подстроку. Является методом объекта String, поэтому вызывается для строки, которая проверяется на совпадение с шаблонов. В качестве параметров передаются регулярное выражение и параметры поиска.

test - данный метод проверяет, есть ли совпадения в строке относительно шаблона и возвращает false, если сопоставление с образцом закончилось неудачей, в противном случае true. Является методом объекта RegExp, поэтому вызывается для строки, заданной в виде регулярного выражения. В качестве параметра передается строка, которая проверяется на соответствие шаблону.

Например:

 <script language="JavaScript">

  var str="JavaScript"

  var reg=/PHP/

  var result=reg.test(str)

  document.write(result)

 </script>

  

выведет в качестве результата false, т.к. строка "JavaScript" не равна строке "PHP".

Обратите внимание на то, как это все организовано. Сначала создается строка (str), которая будет проверятся на соответствие шаблону. Потом создается шаблон (reg) в виде регулярного выражения. Затем вызывается метод test  регулярного выражения reg, а в качестве параметра данного метода задается проверяемая строка str, т.е. получаем конструкцию: reg.test(str). Результат работы данного теста сохраняется в переменной, например в нашем случае, result.

Также метод test может возвращать вместо true или false любую другую строку заданную программистом.

Например:

<script language="JavaScript">

var str="JavaScript"

var reg=/PHP/

var result=reg.test(str) ? "Строка совпала" : "Строка не совпала"

document.write(result)

</script>

  

в этом случае в качестве результата будет строка «Строка не совпала».

exec - данный метод выполняет сопоставление строки с образцом, заданным шаблоном. Является методом объекта RegExp, поэтому вызывается для строки, заданной в виде регулярного выражения. В качестве параметра передается строка, которая проверяется на соответствие шаблону.

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

Например:

 <script language="JavaScript">

  var reg=/(\d+).(\d+).(\d+)/

  var arr=reg.exec("Я родился 15.09.1980")

  document.write("Дата рождения: ", arr[0], "< br>")

  document.write("День рождения: ", arr[1], "< br>")

  document.write("Месяц рождения: ", arr[2], "< br>")

  document.write("Год рождения: ", arr[3], "< br>")

 </script>

  

в результате получим четыре строки:
Дата рождения: 15.09.1980
День рождения: 15
Месяц рождения: 09
Год рождения: 1980

 

Запоминание найденных подстрок

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

Для доступа к запомненным подстрокам используются свойства
$1, :, $9 объекта RegExp или элементы массива, возвращаемого методами exec и math. В последнем случае количество найденных и запомненных подстрок не ограничено.

Значениями свойств $1, :, $9 являются подстроки исходной строки, которые были запомнены в процессе последнего сопоставления с образцом. Регулярное выражение может содержать любое количество выражений в круглых скобках, но в объекте RegExp запоминаются только последние девять найденных соответствий.

Например следующий сценарий

var re = new RegExp("(\\d*)\\s*(\\d*)","ig");

var arr = re.exec("444 555 6666");

var s = "$1 = "" + RegExp.$1 + "" ";

s += "$2 = "" + RegExp.$2 + "" ";

s += "$3 = "" + RegExp.$3 + """;

document.write(s);

выведет на экран браузера текст
$1 = "444" $2 = "555" $3 = "".

Кроме того, для доступа к запомненным подстрокам используются свойства
$01, :, $99 объекта RegExp . Значениями свойств $01, :, $99 являются подстроки исходной строки, которые были запомнены в процессе последнего сопоставления с образцом. Регулярное выражение может содержать любое количество выражений в круглых скобках, но в этих свойствах запоминаются только последние 99 найденных соответствий.

 

Пример: следующий сценарий

var re = new RegExp("(\\d*)\\s*(\\d*)","ig");

var arr = re.exec("444 555 6666");

var s = "$01 = "" + RegExp.$01 + "" ";

s += "$02 = "" + RegExp.$02 + "" ";

s += "$03 = "" + RegExp.$03 + """;

document.write(s);

выведет на экран обозревателя текст
$01 = "444" $02 = "555" $03 = "".

Следующий сценарий использует метод replace для перестановки слов в строке. Для замены найденного текста используются свойства $1 и $2 – соответственно первое и второе слово в рассматриваемой строке.

 <script language="JavaScript">

  var re = /(\w+)\s(\w+)/;

  var str = "Михаил Булгаков";

  document.write(str.replace(re, "$2, $1"))

 </script>

Этот сценарий выведет в окно обозревателя текст: Булгаков, Михаил

Еще пример:

 /(\w+)@({\w\._}+)/

Данное выражение ищет любой адрес электронной почты, разбивая его на две части: имя почтового ящика и имя сервера, и сохраняет их в памяти в виде групп символов под номерами 1 и 2.

 

Модификаторы поиска

При создании регулярного выражения можно указать дополнительные опции поиска:

i (ignore case).

Не различать строчные и прописные буквы

g (global search)

Глобальный поиск всех вхождений образца

m (multiline).

Многострочный поиск.

Можно использовать любые комбинации этих трех опций, например, ig или gim.



Приведем еще несколько примеров. Обратите внимание на пример формирования результирующей строки!

Регулярные выражения различают строчные и прописные буквы, поэтому следующий сценарий

var s = "Изучаем язык JavaScript";

var re = /JAVA/;

var result = re.test(s) ? "" " : "" не ";

document.write("Строка "" + s + result + "соответствует образцу " + re);

  

выведет в окно обозревателя текст:

Строка "Изучаем язык JavaScript" не соответствует образцу /JAVA/

Если теперь заменим вторую строку примера на var re = /JAVA/i;, то на экран будет выведен текст:

Строка "Изучаем язык JavaScript" соответствует образцу /JAVA/i

Теперь рассмотрим опцию глобального поиска. Она обычно применяется методом replace при поиске образца и замены найденной подстроки на новую. Дело в том, что по умолчанию этот метод производит замену только первой найденной подстроки и возвращает полученный результат. Рассмотрим следующий сценарий:

 var s = "Мы пишем сценарии на JavaScript, " +

 "но JavaScript - не единственный сценарный язык.";

 var re = /JavaScript/;

 document.write(s.replace(re, "VBScript"));

  

Он выводит в окно обозревателя текст, который явно не соответствует желаемому результату:

Мы пишем сценарии на VBScript, но JavaScript - не единственный сценарный язык.

Для того, чтобы все вхождения строки "JavaScript" были заменены на "VBScript", необходимо изменить значение регулярного выражения на var re = /JavaScript/g;. Тогда результирующая строка будет иметь вид:

Мы пишем сценарии на VBScript, но VBScript - не единственный сценарный язык.

Наконец, опция многострочного поиска позволяет проводить сопоставление с образцом строкового выражения, состоящего из нескольких строк текста, соединенных символами разрыва строки. По умолчанию, сопоставление с образцом прекращается, если найден символ разрыва строки. Данная опция преодолевает указанное ограничение и обеспечивает поиск образца по всей исходной строке. Она также влияет на интерпретацию некоторых специальных символов в регулярных выражениях, а именно: обычно символ ^ сопоставляется только с первым элементом строки. Если же опция многострочного поиска включена, то он также сопоставляется с любым элементом строки, которому предшествует символ разрыва строки. Обычно символ $ сопоставляется только с последним элементом строки. Если же опция многострочного поиска включена, то он также сопоставляется с любым элементом строки, который является символом разрыва строки.

В заключении отметим, в данной лабораторной работе отображены далеко не все возможности регулярных выражений. Для более глубокого изучения этого вопроса необходимо более подробно изучить объект RegExp.


Практическое задание

Используя теоретическую часть, отобразите в Вашем документе следующее:

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

Фамилия:

Имя:

Отчество:

  1.  организуйте проверку правильности введенных данных и выполнение индивидуального задания:
  •  обязательные поля должны быть заполненными;
  •  необходимо проверить на корректность их ввода, например, в поле телефон должны быть только цифры; в ФИО не может быть цифр; электронный адрес должен содержать символы до и после знака @, последняя метка не более 3-х символов  и т.п.;
  •  для проверки правильности введенных данных используйте регулярные выражения;
  •  в случае ошибок необходимо вывести на экран соответствующие сообщения, в случае отсутствия ошибок – вывести введенные данные и результаты выполнения индивидуального задания..

Следующие индивидуальные задания выполняются в группе по вариантам

  1.  Напишите скрипт, заменяющий во веденном предложении все заданные пользователем буквы  на другую заданную  букву.  Разместите на форме переключатель (checkbox), позволяющий включать функцию замены без / с учетом регистра.
  2.  Напишите скрипт, позволяющий по введенной строке (например, «Государственный экзамен состоится 25.06.2012») вывести на экран отдельно день государственного экзамена, месяц государственного экзамена и год государственного экзамена. Разместите на форме переключатели (checkbox), позволяющие выводить только день, только год, только месяц, день и месяц, месяц и год или все три характеристики одновременно. Строка вводится пользователем (формулировка может быть любая, однако она должна обязательно сдержать дату).
  3.  Напишите скрипт, позволяющий по строке «Текущее время 15:06:11» вывести на экран отдельно час, минуты и секунды. Разместите на форме переключатели (checkbox), позволяющие выводить только час, только минуты, только секунды, час  и минуты, минуты и секунды или все три характеристики одновременно. Строка формируется автоматически программой.
  4.  Напишите скрипт, позволяющий по строке «До нового учебного года осталось 03/01/03» вывести на экран отдельно количество месяцев, количество недель, количество дней. Разместите на форме переключатели (checkbox), позволяющие выводить только месяцы, только недели, только дни, месяцы  и недели, месяцы и дни или все три характеристики одновременно. Строка формируется автоматически программой.

Контрольные вопросы к лабораторной работе 6

  1.  Что такое «регулярные выражения»? Для чего они используются?
  2.  Приведите основные понятия, связанные с регулярными выражениями. и их общее описание.
  3.  Какие способы присваивания переменным регулярных выражений вы знаете?
  4.  Что такое «простейший шаблон»? Приведите пример.
  5.  Что такое «метасимвол»? Приведите классификацию метасимволов.
  6.  Опишите метасимволы поиска совпадений
  7.  Опишите количественные метасимволы.
  8.  Опишите метасимволы позиционирования.
  9.  Опишите методы для работы с шаблонами
  10.  Опишите приемы запоминания найденных подстрок
  11.  Приведите описание модификаторов поиска.




1. Сопоставление автоэволюционизма с неодарвинизмом
2. ТРЕМ ОСНОВАМ ВОИМЯ АЛЛАХА МИЛОСТИВОГО МИЛОСЕРДНОГО ВО ИМЯ Автор да помилует его Аллах начал свою кни
3. Курсовая работа- Администрирование ОС Windows
4. Что же сбылось из предсказаний Нострадамуса
5.  Організаційна характеристика та облікова політика господарства
6. корреспондент РАН профессор ректор СПбНИУ ИТМО С
7. 11 реферат дисертації на здобуття наукового ступеня кандидата хімічних наук
8. глибина пошкодження шкіри
9. реферат Соті фарси та містерії як явище культури середньовіччя Виконав студен
10. Сийский заказник Архангельской области
11. Этнический состав Причерноморской Руси
12. Накопители информации
13. Криминалистика Учебно-методический комплекс.html
14. Бизнес-планирование деятельности предприятия
15. На тему- визначення постійної Планка за спектральними лініями водню
16. несерйозності в газетах та ЗМІ
17. Действующие лица Падишах Шахерезада Слуга с опахалом Поросёнок Цыганка Баба Яг
18. Металлургическая теплотехника
19. сосудистой системы
20. Социология общественного мнения