Читать реферат по информатике, вычислительной технике, телекоммуникациям: "Регулярные выражения в perl" Страница 4
тест однозначно попадает под шаблон: Vasya не состоит из пробельных символов, далее следует один пробельный символ (натурально пробел), а Pupkin составляет оставшуюся часть строки. Результат второго теста у нас какой то странный. Первый контейнер у нас оказался пуст, а второй почему то содержит всю строку без ведущего пробела. С чем это связано? Да с тем, что квантификатор * означает ноль или более символов. Так как первым в строке у нас пробельный символ, в правый контейнер, согласно условию, попадает ноль непробельных символов. Далее, пробел то не входит в состав контейнеров. Ну а второй контейнер жрет всю строку до конца. Третий вариант, я думаю, понятен. Я уже говорил, что каждый символ регулярного выражения соответствует единичному. И только квантификаторы позволяют кушать несколько символов одного класса. В шаблоне контейнеры разделены одиночным пробельным символом. В левый контейнер попадает Vasya. Самым законным образом первый пробельный символ (табуляция в примере) пропускается, а правый контейнер кушает все что осталось - в том числе и второй табулятор. Таким образом, получаем Пупкина с ведущей табуляцией.
Наверное это не совсем тот результат, который мы хотели бы получить. Нафига нам ведущие пробелы. Ну вы же знаете достаточно, что бы превратить разделитель контейнеров в квантификатор. Ну так приступайте :)
/([^\s]*)\s*(.*)/
Теперь наше регулярное выражение будет пропускать между именем и фамилией все пробельные символы. Результат должен быть таким.
$1=Vasya
$2=Pupkin
$1=
$2=Vasya Pupkin
$1=Vasya
$2=pupkin
Осталось выяснить, каким образом правильно интерпретировать значения второго теста. Во-первых нужно избавиться от привязки к началу строки (по моему этот спецсимвол уже успел потеряться в наших примерах :). Итак, шаблон должен обрабатывать ситуации, когда в начале строки может быть один или несколько пробельных символов. Ну это же элементарно, скажете вы, нужно просто добавить в начало шаблона \s и сделать из него квантификатор.
/\s*([^\s]*)\s*(.*)/
Поздравляю! Вы прошли вводный курс по регэкспам ;)
Про обжору и другие тонкости
Теперь стоит поговорить о тонкостях, которые имеют место быть при составление регулярных выражений. Самое известное - это прожорливость квантификатора. Означает это следующее: квантификатор имеет привычку вбирать в себя максимальную строку, какую только может съесть. Для примера можно взять следующий шаблон
/.*pupkin/
Смысл его очевиден - искать Пупкина перед которым может быть что то еще. Однако если источник содержит несколько Пупкиных, то квантификатор сожрет все вплоть до последнего Пупкина. Например поиск по этому регэкспу в строке
Vasya pupkin pupkin
приведет к тому, что квантификатор сожрет "Vasya pupkin ", а не "Vasya " как можно было ожидать. Для решения этой проблемы, достойной пристального внимания, имеется ряд специальных символов. Прежде всего символ вопроса ? позволяет ограничить апетит квантификатора минимальной строкой совпадения. Возвращаясь к нашему примеру с несколькими Пупкиными получим
/.*?pupkin/
для корректного поедания "Vasya " из строки "Vasya pupkin pupkin". Далее, конструкции с фигурными скобками позволяют определять границы апетита квантификатора. Внутри фигурных скобок (естественно после самого квантификатора) может быть указано одно или два значения,
Похожие работы
| Тема: Регулярные выражения в perl |
| Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
| Тема: Встроенные типы данных в С#. Массивы. Строки. Регулярные выражения |
| Предмет/Тип: Отсутствует (Практическое задание) |
| Тема: Регулярные планы застройки Калуги и уездных центров XVIII века |
| Предмет/Тип: Культурология (Контрольная работа) |
| Тема: Регулярные сигналы |
| Предмет/Тип: Информатика, ВТ, телекоммуникации (Практическое задание) |
| Тема: Тромбоцитарная активность у студентов, проходящих регулярные тренировки по снарядной гимнастике |
| Предмет/Тип: Медицина, физкультура, здравоохранение (Реферат) |
Интересная статья: Основы написания курсовой работы

(Назад)
(Cкачать работу)