Современный мир находится в постоянном движении. Все, что было изобретено в прошедшие десятилетия, объединяется сегодня в новые мощные технологии, а то, что еще вчера было примером блестящих передовых решений, становится обыденным. Глобальные перемены коснулись и 3D-графики. Ее возможности трудно переоценить: она вносит не только больший реализм в компьютерное искусство, кино- и видеоиндустрию, но оказывает влияние и на способы нашего общения с машиной. Несмотря на то, что компьютерное проектирование и работа с трехмерными объектами практикуются уже в течение нескольких десятилетий, только в последние два-три года, после появления мощных домашних компьютеров, стали наблюдаться серьезный прогресс и беспрецедентная динамика развития 3D-графики.
3D Studio Max - наиболее распространенное в мире программное обеспечение для 3D-моделирования, анимации и визуализации, включающее высокопроизводительные инструменты, необходимые для создания зрелищных кинофильмов и телевизионных заставок, современных компьютерных игр и презентационных материалов. 3D Studio Max 7,0 - это реализм, выразительность, производительность и гибкость.
Теперь вам не потребуются десятки и сотни книг по 3D Studio Max. Просто начните самостоятельно работать с программой с помощью этой книги! Познакомьтесь с последней версией пакета трехмерной компьютерной графики и анимации 3D Studio Max 7.0, легко и быстро изучите основные приемы работы с программой, освойте базовый набор инструментов, при помощи которого вы сможете создавать как простые, так и достаточно сложные анимационные объекты. В книге также рассмотрены возможности модификации трехмерных объектов, а также редактор материалов и способы визуализации трехмерных сцен.
Для начинающих пользователей персонального компьютера, профессионалов, а также для тех, кто увлекается графикой и ее оживлением. Для просмотра книг в DJVU используем DjvuReader или WinDjView.
Книга призвана помочь в овладении искусством программирования тем, кто уже освоил основы составления программ на языке Turbo Pascal. Материал излагается на примере решения 20 практических задач с достаточно сложной логикой по различным темам - комбинаторика, моделирование физических процессов, рекурсивные и нерекурсивные решения.
Для каждой задачи анализируются возможные пути решения, возникающие проблемы, возможные логические ошибки и технические детали. Для большинства задач приведено несколько вариантов решения, для каждого из которых показаны приемущества и недостатки. В процессе анализа выведены некоторые общие правила и принципы программирования.
В книге рассматриваются все вопросы создания новых компонентов в системе программирования Borland Delphi. Книга состоит из трех частей. Первая посвящена реализации объектно-ориентированной модели, являющейся основой любого вновь создаваемого компонента. Во второй части подробно рассматриваются все детали процесса создания компонентов, в том числе выбор родительского класса, создание модуля компонента и включение его в существующий или новый пакет, создание свойств, методов и событий, тестирование и отладка компонента и его регистрация в среде Delphi. Рассматриваются также особенности создания компонентов для работы с базами данных, проблемы разработки нестандартных редакторов свойств и компонентов, разработка контекстной справки и ее подключение к справочной службе Delphi. Описываются особенности создания компонентов в новейшей на сегодня версии Delphi 8.0, а также отличия других версий, которые необходимо учитывать при разработке компонентов. В заключительной части приводятся исходные тексты многочисленных примеров компонентов. Книга рассчитана в основном на подготовленного читателя (программиста, имеющего опыт работы с Delphi), но может быть полезна начинающим программистам, студентам и преподавателям.
Книги, подобные этой, редко появляются на прилавках магазинов, поскольку за ними стоит многолетний опыт работы их авторов. В книге описывается хороший стиль Unix-программирования, многообразие доступных языков программирования, их преимущества и недостатки, различные IPC-методики и инструменты разработки. Автор анализирует философию Unix, культуру и основные традиции сформированного вокруг нее сообщества. В книге объясняются наилучшие практические приемы проектирования и разработки программ в Unix. Вместе с тем описанные в книге модели и принципы будут во многом полезны и Windows-разработчикам. Особо рассматриваются стили пользовательских интерфейсов Unix- программ и инструменты для их разработки. Отдельная глава посвящена описанию принципов и инструментов для создания хорошей документации.
Книга будет полезна для широкой категории пользователей ПК и программистов.
Эта книга посвящена искусству программирования на одном из самых популярных и мощных языков. Значительное внимание уделено таким актуальным вопросам, как обработка данных, работа с битами и байтами, отладка программ, управление памятью, моделирование, рекурсия, а также темам, не часто встречающимся в литературе, но играющим важную роль при разработке коммерческих приложений. Описание самых разнообразных алгоритмов в книге гармонично сочетается с вопросами их практической реализации. Приведено большое количество фрагментов кода и целых программ, которые непосредственно можно применять в сложных приложениях.
Книга предназначена для опытных программистов, а также читателей, имеющих базовые знания по языку С и желающих повысить свою квалификацию до профессионального уровня.
Книга посвящена применению языка C++ для решения интересных, полезных и сложных задач программирования. Рассмотрены разработка сборщика мусора, пользовательского контейнера STL и панели управления потоком. Показано, как создать загрузчик файлов из Интернета, а также написать приложения для финансовых расчетов (вычисления платежей по ссуде, расчет суммы вложении и др.). Уделено внимание вопросам применения языка C++ для решения задач искусственного интеллекта. Приведен уникальный код интерпретатора Mini C++. Каждая глава книги сопровождается заданиями для самостоятельной работы.
Для программистов.
Рассмотрено программирование графических эффектов на языке C++ с использованием популярной библиотеки DirectX. На занимательных практических примерах показано, как создавать различные визуальные эффекты (реалистичный огонь, электрические разряды, зеркала и др.), используемые при разработке демонстрационных роликов (Demoscene). Пошагово описано применение основных методов и интерфейсов DirectX. Показано, как написать оптимальный и эффективный программный код. Большое внимание уделено технологии использования вершинных и пиксельных тендеров для создания реалистичных изображений.
Для программистов.
Эта книга будет полезной как пользователям Internet, желающим овладеть непростым искусством разработки интерактивных Web-узлов, так и опытным сетевым администраторам, поддерживающим корпоративные сети и Web-серверы. Подробно рассмотрен язык программирования ActionScript, включая отладку готовых сценариев. Здесь вы найдете множество практических примеров, иллюстрирующих теоретические концепции.
В книге дано описание основных элементов языка Ассемблера семейства IBM PC: системы счисления, машинное представление данных и команд, основы 16- и 32-разрядного программирования, программирование сопроцессора, ввод-вывод информации в DOS и Windows, использование макросредств. Подробно, шаг за шагом на многочисленных примерах законченных программ рассматриваются идеи и принципы организации вычислений на Ассемблере от простого к сложному, используя аналогию и прямую поддержку со стороны алгоритмических языков Pascal (Borland Pascal-7.0. Delphi-5) и C/C++ (Borland C++ 3.1,4.5. 5.02, Borland C++ Builder 5, Visual C++ 6.0).
Истории, рассказанные в этой книге, демонстрируют, как небезопасны все компьютерные системы, и как мы уязвимы перед подобными атаками. Урок этих историй заключается в том, что хакеры находят новые и новые уязвимости каждый день. Читая эту книгу, думайте не о том, как изучить конкретные уязвимости тех или иных устройств, а о том, как изменить ваш подход к проблеме безопасности и приобрести новый опыт.
Если вы профессионал в области информационных технологий или обеспечения безопасности, каждая из историй станет для вас своеобразным уроком того, как повысить уровень безопасности в вашей компании. Если же вы не имеете отношения к технике и просто любите детективы, истории о рисковых и мужественных парнях - вы найдете их на страницах этой книги.
Искусство вторжения. Хакерство
Митник К.Д., Саймон В.Л.
Издательство: ДМК пресс, Компания АйТи
Год издания: 2005
Страниц: 280
ISBN: 5-98453-020-1
Язык: русский
Формат: PDF
Электронная книга The Art of Deception - "Искусство обмана" - доказывает, насколько мы все уязвимы. В современном мире, где безопасность подчас выходит на первый план, на защиту компьютерных сетей и информации тратятся огромные деньги. Деньги тратятся на технологии безопасности. Эта книга объясняет, как просто бывает перехитрить всех защитников и обойти технологическую оборону, как работают социоинженеры и как отразить нападение с их стороны Кевин Митник и его соавтор, Бил Саймон рассказывают множество историй, которые раскрывают секреты социальной инженерии. Авторы дают практические советы по защите от атак, по обеспечению корпоративной безопасности и снижению информационной угрозы "Искусство обмана" не только демонстрирует, насколько опасна и вредоносна социоинженерия, но поможет разработать собственную программу тренинга по безопасности для сотрудников компании.
Хакинг - это искусство взлома всевозможных систем и доведения данного процесса до высот технического изящества. После 2000 года понятие "хакер" окончательно изменилось. Это связано с появлением "хакеров-вандалов". Нет, не хакеров, в изначальном понимании этого слова, но называющими себя именно так, а так называемых взломщиков - крэкеров.
Хакерский взгляд на мир не ограничивается лишь культурой хакеров-программистов. Есть люди, применяющие хакерский подход и к другим вещам, вроде электроники или музыки. В действительности вы можете встретиться с этим подходом на высших уровнях любой науки или искусства. Софтверные хакеры признают таких близких по духу людей и тоже могут называть их "хакерами", некоторые даже провозглашают, что хакерская природа на самом деле не зависит от среды, в которой работает хакер. В этой книге мы сосредоточимся на навыках и подходах софтверных хакеров, а также на традициях той общей культуры, что породила термин "хакер".
Также вы узнаете о дефектах в системе безопасности, автор поделится с вами мыслями о хакинге, введет вас в хакинг UNIX и ftpd и анонимный ftp, вы узнаете, как зарегистрироваться под чужим именем, "троянских конях", о хакинге и Internet, ложных DNS-запросах в Internet и о многих других интересных вещах.
В книге весьма подробно описаны применяемые хакерами программы и инструменты, стратегии взлома, методы создания надежной и эффективной защиты от атак хакеров, подробно обсуждаются различные факторы, влияющие на защиту сети, приведены конкретные рекомендации по созданию различных систем безопасности и примеры конкретных атак хакеров. Значительное внимание уделено описанию систем взлома Windows NT, Linux и Unix и специфическим для этих систем методам вторжения.
В общем, эта книга посвящена российскому хакерскому сообществу. Его этике, юмору, жаргону, ну и, конечно, методам работы. Своей задачей автор не ставит обучать читателя искусству хакинга - речь идет об исключительно просветительных целях для тех, кто привык изучать все "самопалом" и так собирается продолжать. Здесь собраны материалы, переведенные и обработанные различными хакерами. Переработка в соответствии со стилистикой русского языка порой исказила текст, но не технические термины, которые местами остались не переведенными. Тем, кто желает стать "киллером на чате" или "изгаляться" по-другому, автор советует обращаться к источникам более "компетентным" и рискует повториться, что эта книга предназначена для вдумчивых и решительных.
Современная криптография является наукой и одновременно искусством защиты информации. Наиболее известные математической общественности результаты современной криптографии относятся к теории чисел и теории сложности. Менее известно, что теории кодирования так же или даже более необходима для решения широкого круга криптографических задач. Настоящая электронная книга призвана рассказать о достижениях криптографии, которые получены с помощью теории кодирования, и указать на их значимость.
Книга посвящена применению языка C++ для решения интересных, полезных и сложных задач программирования. Рассмотрены разработка сборщика мусора, пользовательского контейнера STL и панели управления потоком. Показано, как создать загрузчик файлов из Интернета, а также написать приложения для финансовых расчетов (вычисления платежей по ссуде, расчет суммы вложений и др.). Уделено внимание вопросам применения языка C++ для решения задач искусственного интеллекта. Приведен уникальный код интерпретатора Mini C++. Каждая глава книги сопровождается заданиями для самостоятельной работы.
Вторая часть серии статей "Использование регулярных выражений в PHP" посвящена решению ряда проблем обработки сложных текстов с помощью "продвинутых" операторов регулярных выражений.
Несмотря на то, что термины данные и информация используются взаимозаменяемо, между ними есть существенная разница. Данные существуют реально. Данные — - это список температур, перечень недавних продаж или опись товара, имеющегося в наличии. Информация — это прогнозы. Информация — это предсказание погоды, прогноз прибылей и убытков и тенденции сбыта. Данные записываются в виде нулей и единиц, в то время как информация обрабатывается мозгом.
Между данными и информацией располагается приложение: механизм, который преобразует одно в другое и наоборот. Например, при покупке книги в Интернете это приложение преобразует вашу информацию — название книги, идентификатор, информацию о банковском счете — в данные: номер заказа, цену со скидкой, характеристики транзакции с использованием кредитной карточки и количество оставшихся в наличии экземпляров книги. Аналогичным образом, приложение преобразует данные в запрос на выборку со склада, отметку об отгрузке и номер отслеживания — информацию, необходимую для реализации продажи.
В действительности сложность создания приложения прямо пропорциональна преобразованиям, которые оно выполняет. Гостевая книга Web-сайта, передающая имя и адрес в поля базы данных, устроена элементарно. С другой стороны, онлайновый магазин, который передает большое количество видов информации в модель данных коммерческой сделки и преобразует данные в информацию для реализации процесса принятия решений, достаточно сложен с точки зрения разработки. Искусство программирования заключается в умелом манипулировании данными и информацией — мастерство, схожее с фиксацией света в живописи.
Как было сказано в первой части, регулярные выражения являются одним из самых мощных средств манипулирования данными. Регулярные выражения лаконично описывают форму данных и раскладывают их на составляющие. Например, следующее регулярное выражение можно использовать для обработки температуры, заданной в градусах по Цельсию или по Фаренгейту: /^([+-]?[0-9]+)([CF])$/.
Регулярное выражение сравнивает начало строки (отображается знаком "крышка" (^), за которым идет знак "+", знак "-", или ничего ([+-]?), за которым следует целое число ([0-9]+), обозначение шкалы — Цельсия или Фаренгейта ([CF]) — и заканчивается концом строки (обозначается знаком доллара $).
В данном регулярном выражении операторы начала строки и конца строки представляют собой примеры операторов нулевой ширины или совпадений по положению, а не по символам. Круглые скобки также не указывают на символы. Зато, если заключить шаблон в круглые скобки, то будет извлечен текст, соответствующий шаблону. Следовательно, если текст полностью сопоставим с шаблоном, то первая пара круглых скобок выдаст строку, представляющую собой положительное или отрицательное целое число, например, +49, а вторая пара круглых скобок - или букву C, или F.
В первой части серии представлено понятие регулярного выражения и были описаны PHP-функции для сравнения текста с шаблонами, а также для извлечения совпадений. А теперь давайте углубимся в изучение регулярных выражений и посмотрим на некоторые "продвинутые" операторы и средства.
Круглые скобки опять приходят на помощь
В большинстве случаев пара круглых скобок используется для описания части шаблона и получения текста, соответствующего этой части. Однако от круглых скобок не всегда требуется получение части шаблона. Как и в сложной арифметической формуле, круглые скобки можно использовать для группировки условий.
Приведу пример. Догадаетесь, какому типу данных соответствует данное выражение?
/[-a-z0-9]+(?:\.[-a-z0-9]+)*\.(?:com|edu|info)/i
Как можно догадаться, это регулярное выражение определяет имена Интернет-сайтов (только для доменов .com, .edu, и .info). Отличием является использование дополнительного оператора ?:. Квалификатор части шаблона ?: отключает функцию извлечения данных, и тем самым дает круглым скобкам возможность обозначать последовательность действий. Например, в данном случае фраза (?:\.[-a-z0-9]+)* соответствует нулю или более элементам строки, например, ".ibm." Аналогично, фраза \.(?:com|edu|info) обозначает последовательность символов, за которой идет одна из строк com, edu, или info.
Отключение функции извлечения информации может показаться бессмысленным, если не подумать о том, что извлечение информации требует дополнительной обработки. Если программа обрабатывает большое количество данных, то отказ от извлечения может быть целесообразным. Кроме того, если вы имеете дело со сложным регулярным выражением, то отключение функции извлечения информации в некоторых частях шаблона может упростить извлечение тех частей шаблона, которые реально нужны.
Примечание: Модификатор i в конце регулярного выражения делает все сопоставления с шаблоном нечувствительными к регистру. Следовательно, подмножество a-z будет сопоставимо со всеми буквами, независимо от регистра.
В PHP есть и другие модификаторы частей шаблона (subpattern). Используя отладчик регулярных выражений, показанный в первой части данной серии (повторно показан в листинге 1), попробуйте сопоставить регулярное выражение ((?i)edu) со строками "EDU," "edu," и "Edu." Если в начале части шаблона задать модификатор (?i), то сопоставление с шаблоном не будет зависеть от регистра. Чувствительность к регистру восстанавливается, как только заканчивается данная часть шаблона. (Сравните с модификатором / ... /i, который применяется ко всему шаблону.)
Листинг 1. Простой отладчик регулярных выражений
Еще один полезный модификатор части шаблона - это (?x). Он позволяет добавлять в шаблон пробелы, что упрощает чтение регулярных выражений. Таким образом, часть шаблона ((?x) edu | com | info) (обратите внимание на пробелы между операторами дизъюнкции, которые добавлены для удобочитаемости) аналогична (edu|com|info). Для того, чтобы добавлять пробелы и комментарии в регулярное выражение, можно использовать глобальный модификатор / ... /x, см. листинг ниже.
Листинг 2. Добавление пробелов и комментариев
Как видно из листинга, при необходимости модификаторы можно объединять. Если необходимо включить в регулярное выражение символ пробела при использовании модификатора (?x), используйте метасимвол \s для поиска любого пробельного символа и \ (обратный слеш с пробелом) для поиска одного пробела, например, ((?x) hello \ there).
Оглядываемся вокруг
В подавляющем большинстве случаев регулярные выражения используются для проверки или декомпозиции входной информации на отдельные "лакомые кусочки", которые записываются в архив данных или сразу же обрабатываются приложением. Общепринятыми сферами применения являются: обработка полей форм, парсинг XML-кода и анализ протоколов.
Еще одна область применения регулярных выражений - форматирование, нормализация или улучшение читаемости данных. Вместо того чтобы использовать регулярные выражения для поиска и извлечения текста, при форматировании они применяются для поиска и вставки текста в надлежащее местоположение.
Вот пример полезного применения форматирования. Предположим, что Web-форма передает приложению значение зарплаты с округлением до целого доллара. Так как зарплата хранится в виде числа целого типа, то перед сохранением переданных данных приложение должно удалять из них знаки пунктуации. Однако при извлечении данных из хранилища, возможно, понадобится изменить их формат и сделать удобочитаемыми с помощью разделителей. В листинге 3 показано, как простой PHP-запрос преобразует сумму в долларах в число.
Листинг 3. Преобразование суммы в долларах в число
Вызов функции preg_replace() заменяет знак доллара, любой пробельный символ и все запятые -- на пустую строку, возвращая то, что предположительно является целым числом. Если проверка функцией is_numeric() подтверждает правильность входных данных, их можно сохранить.
А теперь давайте выполним обратную операцию - добавим к числу знак денежной единицы и запятые-разделители сотен, тысяч и миллионов. Для добавления запятых в определенных позициях можно написать программу для поиска этих компонентов, а можно воспользоваться операторами посмотри вперед и посмотри назад. Модификатор части шаблона ?<= обозначает посмотри назад (то есть влево) от текущей позиции. Модификатор ?= означает "посмотри вперед" (то есть вправо) от текущей позиции.
[pagebreak]
Итак, какие позиции нам нужны? Любое место в строке, при условии, что есть как минимум один символ слева и одна или более групп по три символа справа, не считая десятичной точки и количества центов. Соблюдая это правило и используя два модификатора, анализирующих символы справа и слева от определенной позиции и являющихся операторами нулевой ширины, мы можем достичь цели с помощью следующей инструкции:
Как работает это регулярное выражение? Начиная с первого символа строки и обрабатывая каждый символ, регулярное выражение отвечает на вопрос: "Есть ли хотя бы один символ слева и одна или несколько групп из трех символов справа?" Если да, то наш оператор нулевой ширины заменяется запятой.
Большинство сложных сопоставлений можно реализовать, используя стратегию, аналогичную приведенной выше. Например, вот еще один вариант использования оператора "посмотри вперед", который решает широко распространенную дилемму.
Листинг 4. Пример использования оператора "посмотри вперед" ("предвидение")
Оператор preg_replace() преобразует строку данных, разделенных запятыми, в строку данных, разделенных знаком табуляции. Предусмотрительным образом, он не заменяет запятые в строке, заключенной в кавычки.
Это регулярное выражение при каждом обнаружении запятой (на это указывает запятая в самом начале регулярного выражения) проверяет утверждение: "Впереди не было кавычек или было четное количество кавычек". Если утверждение верно, то запятую можно заменить знаком табуляции (the \t).
Если Вам не нравятся операторы «посмотри вперед» и «посмотри назад» или вы работаете с таким языком, в котором их нет, можно добавить запятые в число и с помощью обычного регулярного выражения. Однако для реализации такого решения потребуется много итераций.
Листинг 5. Добавление запятых
Давайте пройдем по коду. Сначала параметр зарплаты очищается от знаков пунктуации для моделирования ситуации чтения целого числа из базы данных. Затем выполняется цикл в поисках позиций, где за одним числовым символом ((\d) идут три числовых символа ((\d\d\d\): если обнаруживается граница слова, заданная как \b, цикл прекращается. Граница слова -- это еще один оператор нулевой ширины, который соответствует следующим позициям:
* Перед первым символом строки, если это буква слова.
* За последним символом строки, если это буква слова.
* Между буквой слова и небуквенным символом, непосредственно за буквой слова.
* Между небуквенным символом и буквой слова, непосредственно за небуквенным символом.
Таким образом, примерами правильных границ слова являются пробел, точка и запятая.
Благодаря внешнему циклу регулярное выражение перемещается слева направо в поисках цифры, за которой идут три цифры и граница слова. При обнаружении совпадения между двумя частями шаблона добавляется запятая. Цикл должен продолжаться до тех пор, пока оператор preg_replace() находит совпадения, что задано в условии $old != $pretty_print.
Жадность и лень
Регулярные выражения обладают большими возможностями, иногда даже слишком большими. Например, давайте рассмотрим, что произойдет, если регулярное выражение ".*" будет обрабатывать строку "The author of 'Wicked' also wrote 'Mirror, Mirror.'" Вероятно, вы предполагаете, что preg_match() вернет два совпадения, и с удивлением обнаружите, что результат всего один: 'Wicked' also wrote 'Mirror, Mirror.'
Почему? Если не задать иное, то такие операторы как * (ноль или более) и + (один или более) -- "жадные". Если сопоставление с образцом может продолжаться, то они и будут его продолжать до тех пор, пока не будет возвращен максимальный результат из возможных. Для сохранения минимальных совпадений необходимо принудительно заставлять определенные операторы быть "ленивыми". "Ленивые" операторы находят самое короткое совпадение и на этом останавливаются. Чтобы сделать оператор более "ленивым", добавьте суффикс в виде знака вопроса. Пример показан в листинге 6.
Листинг 6. Добавление суффикса в виде знака вопроса
Регулярное выражение ".*?" расшифровывается следующим образом: "найти кавычку, за которой идет ровно столько символов с последующей кавычкой.
Однако иногда оператор * может быть слишком "ленивым". Например, посмотрите на следующий фрагмент кода. Что он делает?
Листинг 7. Простой отладчик регулярных выражений
Что вы загадали? "123"? "1"? Нет результата? На самом деле результатом будет Array ( [0] => [1] => ), означающий, что совпадение было найдено, но никаких данных извлечено не было. Почему? Вспомните, что оператор * ищет совпадения с нулем или более символов. В данном случае, выражение [0-9]* находит совпадение с нулем символов от начала строки, и обработка заканчиваетс.
Для решения данной проблемы добавьте оператор нулевой ширины для привязки совпадения, который заставляет регулярное выражение продолжать сопоставления; /([0-9]*\b/.
Советы и рекомендации
С помощью регулярных выражений можно решать как простые, так и сложные задачи при обработке текста. Начните с небольшой группы операторов и по мере того, как вы будете набираться опыта, расширяйте свой словарь. В качестве вознаграждения за ваши старания -- некоторые советы и рекомендации.
Создание переносимых регулярных выражений с помощью классов символов
Вам уже знакомы метасимволы, например, \s - соответствует любому пробельному символу. Кроме того, большинство реализаций регулярных выражений поддерживает предопределенные классы символов, которые более просты в использовании и переносимы с одного письменного языка на другой. Например, класс символов [:punct:] замещает все символы пунктуации в данном языке. Вместо [0-9] можно использовать [:digit:] и более переносимое замещение [:alpha:] вместо [-a-zA-Z0-9_]. Например, можно убрать все знаки пунктуации, используя:
Класс символов представляет собой более сжатую форму по сравнению с подробным описанием всех символов пунктуации. Полный перечень классов символов можно найти в документации по версии языка PHP.
Как исключить то, что вы не ищете
Как показано в примере с данными, разделенными символом табуляции, в качестве значений, разделенных запятыми (CSV), иногда проще и точнее задать список тех вариантов, которые не нужно находить (сопоставлять). Последовательность, начинающаяся со знака "крышка" (^) будет соответствовать любому символу, не принадлежащему данной последовательности. Например, для проверки правильности телефонных номеров для США можно использовать регулярное выражение /[2-9][0-9]{2}[2-9][0-9]{2}[0-9]{4}/. Используя набор ограничений можно написать регулярное выражение в более явном виде /[^01][0-9]{2}[^01][0-9]{2}[0-9]{4}/. Оба регулярных выражения работают, хотя смысл последнего, вероятно, более понятен.
Пропуск новой строки
Если во входных данных несколько строк, стандартного регулярного выражения будет недостаточно, так как сканирование прекращается на начале новой строки, которая обозначается $. Однако, если воспользоваться модификаторами s или m, то регулярное выражение будет обрабатывать входные данные по-другому. Первый модификатор рассматривает строковую последовательность как одну строку, где точка указывает на начало новой строки (обычно она этого не делает). Второй рассматривает строковую последовательность как несколько строк, где ^ и $ соответствуют началу и концу любой строки, соответственно. Приведем пример. Если задать $string = "Hello,\nthere";, то оператор preg_match( "/.*/s", $string, $matches) параметру $matches[0] присвоит значение Hello,\nthere. (При удалении s будет выдано Hello.)