Возможно вы искали: 'Pockie Ninja'

May 15 2025 18:26:39
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Регулярные выражения в C++: Использование библиотеки PCRE. (pcre gcc cpp regex)

Регулярные выражения в C++: Использование библиотеки PCRE. (pcre gcc cpp regex)

Ключевые слова: pcre, gcc, cpp, regex, (найти похожие документы)

From: webcode.ru <mail@webcode.ru.>
Date: Sun, 24 Nov 2006 17:02:14 +0000 (UTC)
Subject: Регулярные выражения в C++: Использование библиотеки PCRE.

Оригинал: http://webcode.ru/re/pcre/ http://webcode.ru/re/pcrelocale/


Поддержка регулярных выражений очень полезна в CGI-программировании.
В C++ отсутствуют встроенные механизмы для работы с ними. Разработчик,
однако, может воспользоваться библиотекой Perl Compatible Regular
Expressions (PCRE), ее исходные коды и документация находятся на сайте
http://www.pcre.org.


Установка

Дистрибутив содержит подробное описание процесса установки библиотеки
как в юникс-системах, так и под Windows. В последнем случае
потребуется предварительно немного изменить исходные файлы. После
компиляции появятся библиотеки pcre.lib и pcreposix.lib, которые
следует подключать к проектам, использующим PCRE.


Минимальная программа

Прежде всего нужно подключить заголовочный файл pcre.h.

#include <pcre.h>

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

char pattern[] = "e";
char str[] = "test";


Если необходимо работать со строками на русском языке, можно
попытаться подключить соответствующую локаль. О том, как это сделать,
рассказано в статье "Локаль в PCRE".

Наконец, мы готовы скомпилировать шаблон. Для этого следует вызвать
функцию pcre_compile(). В первом аргументе нужно указать ссылку
на строку, содержащую регулярное выражение. Во втором параметре можно
указать различные атрибуты (соответствующие опциям /igms... в Perl).
Следующие два параметра возвращают расшифровку сообщения об ошибках
компиляции. В последнем аргументе ожидается NULL или ссылку на таблицу
локали. В случае успеха функция вернет указатель на структуру типа
pcre.

pcre *re;
int options = 0;
const char *error;
int erroffset;
re = pcre_compile ((char *) pattern, options, &error, &erroffset, NULL);


Примечание. Может оказаться так, что в поставку с компилятором уже
входит библиотека PCRE. Однако, конкретная реализация может отличаться
от оригинальной. В частности, некоторые популярные компиляторы
в определении функции pcre_exec() обходятся без параметра options.

Если при компиляции шаблона произошла ошибка, переменная re будет
содержать значение NULL.

if (!re){
cout << "Failedn";
}


Если ошибки нет, можно вызывать функцию pcre_exec() для поиска
совпадений. В первом аргументе передают значение, возвращенное функций
pcre_compile(). Следующие три аргумента -- анализируемая строка,
ее длинна и смещение, начиная с которого будет обрабатываться строка.
Далее идет параметр, указывающий опции (их подробное описание
приведено в документации). В последних двух аргументах нужно указать
ссылку на массив целых чисел и его длину.

else{
int count = 0;
int ovector[30];
count = pcre_exec (re, NULL, (char *) str, 4, 0, 0, ovector, 30);


После работы функция возвратит число совпадений или отрицательное
число в случае ошибки.

if (!count){
cout << "No matchn";


Если найдены совпадения, то в массиве ovector будут записаны пары
индексов, указывающих на начало и конец совпадений. Первые два
элемента массива описывают положение всего совпавшего выражения.
Остальные пары -- положение подстрок, которые совпали с выражениями
в круглых скобках в шаблоне (это аналоги переменных вида $1 в Perl).

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

В нашем примере (шаблон e и строка test) найдется совпадение со второй
буквой в строке. Поэтому первые два элемента массива ovector содержат
числа 1 и 2, то есть указывают на совпадение, начинающееся в первой
позиции строки и заканчивающееся во второй. Индексация элементов
в символьных массивах C++ начинается с нуля.

Если шаблон содержит строку (e), в массиве ovector значимыми станут
две пары индексов, причем в этом случае они совпадут, поскольку весь
шаблон полностью заключен в круглые скобки.

Рассмотрим еще один простой пример, записав регулярное выражение
e(.)t. Шаблон совпадет с подстрокой est, а в первую переменную попадет
подстрока s. Поскольку теперь совпадение начинается с первого символа,
а длина совпавшей части равна трем, в первых двух элементах массива
ovector появятся значения 1 и 4. Следующая пара -- 2 и 3 (то есть
подстрока единичной длины, начинающаяся во второй позиции образца).


Полный код

Код простейшей программы приведен ниже. Шаблон и строка зафиксированы
в ее теле. Программа выводит только пары индексов из массива ovector.


#include <iostream.h>
#include <pcre.h>
int main(){
char pattern[] = "e";
char str[] = "test";
const unsigned char *tables = NULL;
setlocale (LC_CTYPE, (const char *) "ru.");
tables = pcre_maketables();
pcre *re;
int options = 0;
const char *error;
int erroffset;
re = pcre_compile ((char *) pattern, options, &error, &erroffset, NULL);
if (!re){
cout << "Failedn";
}
else{
int count = 0;
int ovector[30];
count = pcre_exec (re, NULL, (char *) str, 4, 0, 0, ovector, 30);
if (!count){
cout << "No matchn";
}
else{
for (int c = 0; c < 2 * count; c += 2){
if (ovector[c] < 0){
cout << "<unset>n";
}
else{
cout << ovector[c] << "/" << ovector[c + 1] << "n";
}
}
}
}
return 0;
}




Каждый день специально обученный скрипт обращается к Яндексу и ищет
этот материал на других серверах.
© webcode.ru <mail@webcode.ru.>



Локаль в PCRE

Как построить локаль для правильной работы функций PCRE.

В предыдущей статье было рассказано о том, как применять библиотеку
PCRE (Perl Compatible Regular Expressions) в программах
на C++. Здесь же рассказано, как организовать работу библиотеки
с текстами на русском языке. Одна из первоочередных задач --
обеспечить правильную работу функций с игнорированием регистра
символов.

Установка локали

Если обратиться к определению функции pcre_compile(), то следует
обратить внимание на последний аргумент tableptr:

pcre* pcre_compile (const char *pattern,
int options,
const char **errptr,
int *erroffset,
const unsigned char *tableptr);


Если при вызове этой функции установить последний аргумент в NULL,
библиотека воспользуется собственной таблицей pcre_default_tables,
которая определена в файле chartables.c, в свою очередь
вкомпилированный в библиотечный модуль pcre.lib.

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

Сформировать правильную таблицу локали помогает функция
pcre_maketables(). Она не требует передачи аргументов,
но <<подсознательно>> учитывает текущую локаль. Поэтому, чтобы
построить необходимую таблицу, вначале следует установить локаль
обычными средствами, доступными в программе на C++, а затем вызвать
pcre_maketables() и сохранить возвращенный результат -- указатель
на таблицу локали. Этот указатель следует передать в последнем
аргументе при вызове функции pcre_compile():

setlocale (LC_CTYPE, "Russian_Russia.1251");
const unsigned char *locale_tables = pcre_maketables();
re = pcre_compile (pattern, options, errptr, erroffset, locale_tables);


Обратите внимание на то, что после того, как построена таблица,
функции библиотеки PCRE не учитывают текущую локаль, а работают только
с этой таблицей. Это свойство можно с успехом использовать, чтобы
не нарушать работу остальных функций, пользующихся локалью.
В следующем примере строится таблица необходимой локали, а затем
устанавливается локаль, действующая ранее:

char *current = setlocale (LC_CTYPE, NULL);
char *res = setlocale (LC_CTYPE, locale_string);
if (!res) return false;
locale_tables = pcre_maketables();
setlocale (LC_CTYPE, current);
if (!locale_tables) return false;


Переменная locale_string содержит имя локали. О том, как его
построить, рассказано в статье "Локаль I".

Не следует забывать также и о том, что по окончании работы с таблицей
locale_tables ее следует удалить:

delete locale_tables;


Каждый день специально обученный скрипт обращается к Яндексу и ищет
этот материал на других серверах.

© webcode.ru <mail@webcode.ru.>
1499 Прочтений •  [Регулярные выражения в C++: Использование библиотеки PCRE. (pcre gcc cpp regex)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Регулярные выражения в C++: Использ... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка