Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lecture_3

.txt
Скачиваний:
11
Добавлен:
15.06.2014
Размер:
3.41 Кб
Скачать
Метасимволы

в шаблоне (образцах) pattern

цифры \d [0-9]

символ
слова \w [a-zA-z0-9]

пробельный
символ \s [ \t\n\r..]

не цифра \D [^0-9]

не
символ
слова \W [^a-zA-z0-9]

не
пробельный
символ \S

повторение {n,m}

PERL:
if(/\w+ \s+ \d \s+ \W/)

Указатели повторений(перечислители):

символ+ - повторение от 1 и более - {1,}

xy{1,3} - вначале x, затем повторение символа y от 1 до 3, затем c

символ* - {0,}

символ?
либо есть
либо нет - {0,1}

не более m повторений {,m}

[abc]+ - a, ab, bcc (любое количество входящих символов)



ЗАДАНИЕ ПОИСКА ВНАЧАЛЕ "А" ЗАТЕМ "ЧТО-ТО" ПОТОМ СИМВОЛ С
шаблон:
жадный
a.*с
. - что-то
дано: a xxxx c yyyy c ddd
ответ: a xxxx c yyyy c

поиск по шаблону м.б. "ленивым" или "жадным"

ленивый поиск
a.*?c
дано: a xxxx c yyyy c ddd
ответ: a xxxx c

шаблон:
a.*b.*c
дано: a xxx b zzz c yyy b ppp c
ответ жадный: a (xxx b zzz c yyy )b (ppp) c
( .* ) ( .*)
при нескольких повторениях - более левый более жадный

для ленивого поиска: a.+?с

любой повторять от 3 до 8
a.{3,8} - жадный
a.{3,8}? - ленивый



ПРИВЯЗКА К МЕСТУ В СТРОКЕ
исх. текста

начинается ли строка с текста
обозначение: ^ - начало строки
шаблон пример: ^cat (\A)

строка завершается на
пример шаблона: <...> dom$ (\Z)


ПРИВЯЗКА К ГРАНИЦАМ СЛОВ

\b - граница слова

переход от сиврорв не слов к символам слов
\w\W или \W\w

smole
mole

mol - начало слова начинается на mol

для перла:
\bmol
Pattern.compile("\\bmol")


C и производные языки
экранирование: "C:\\Users\\americanmacgee\\Desktop\\Флоренсов лекции" экранирование второй косой чертой, чтобы не было совпадения со специальными символами

в c#
@"\bmol"
@ - спец знак для того чтобы не экранировать от совпадений

\bслово\b

ОБЩИЙ ПОДХОД ПОСТРОЕНИЯ ПАТТЕРНА JAVA

Pattern regexp = Pattern.compile("cat");
Match mat = regexp.matcher(исходный_текст);
mat.replaceFirst("dog"); - только первое
mat.replaceAll("dog"); - все заменяет

строчные прописные буквы - игнорирование регистра
JAVA
Pattern.compile("cat", PatternOption.CASE_INSENSITIVE)


Использование групп символов

Какой-то текст затем нект образом потом тот же текст
(какой-то текст)
tomaHousetoma
temHousetot

"(t.*)House\1 - в скобках запоминается

подстрока найденная в конктретной группе k, далее (вне RegEx) обозначается $номер
далее заменить найденное house

s/
(t.*)House\1/BuildingHouseBuilding/


в начале текста найти слово затем другое слово и их переставить
s/^(\w+)(\W+)(\w+)/$3$2$1
^ - начало
(\w+) слово $1
(\W+) не символы слова $2
(\w+) слово $3
$3$2$1 - перестановка 1ого слова и 3его слова

ВНИМАНИЕ ДЛЯ КУРСАЧА
домом
дома
дому

шаблон: дом(а|у|ом)

(? ) - чтобы не запоминать группу
шаблон: ((\w+)(\s+)(\w+))abc
Presentation Manager abc
$2 - Presentation
$3 - Manager
$1 - Presentation Manager


import java.utils.*;

JAVA
в объектах Matcher есть метод .group(номер_группы) -- $k



-соотнесение текста и шаблона (соответствует или нет)
-замена
-использование в разбиении текста (split)
split("reg.exp", "или текст или ничего");
Matcher.split(" <текст шаблона>");
возвращает массив строк String[]

обработка русских символов
для использования от независимости от Кк (большие и маленькие)
.compile("текст",Pattern.CASE_INTENSITIVE|UNICODE_CASE)
Соседние файлы в предмете Технологии Разработки Программного Обеспечения