« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
    Популярное
Функция AccessResource

Изменение объекта DataRow

Глава 2. Какой он бывает, этот Linux

Ниша и внедрение CASE-средств

Изучаем среду разработки Microsoft Robotics Studio

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

Сверхдинамичные веб-интерфейсы

Библиотека WebWalker

Наиболее интересные новшества в стандарте SQL:2003

Инструкция case




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 191
Пользователей: 0

Статьи:: Интернет технологии :: PHP :: Регулярные выражения используются для сложного манипулирования строками в PHP



отправить ссылку другу версия для печати  Обсудить на форуме

Регулярные выражения используются для сложного манипулирования строками в PHP

Поддержка интерфейса между скриптом и регулярными выражениями осуществляется через следующие функции: split(), ereg(), ereg_replace(). (доп. редактора). Первым аргументом для всех трех функций - это строка, задающая регулярное выражение. Этот строка состоит из регулярных и специальных символов. Регулярные символы имеют то же значение что и при в других командах unix, в то время как специальные символы имеют специальное значение. Далее следуюет - полный список специальных символов и их значения как это воспринимает синтаксический анализатор php:



.' Является специальным символом, который соответствует любому символу, за
исключением символа новой строки. Используя конкатенацию, мы можем задавать
регулярные выражения подобно 'a.b', которое соответствует любой трех-символьной
строке, которая начинается с 'a' и заканчивается 'b'.

*' Сам по себе это не конструкция; это - суффикс, который означает, что
предшествующее регулярное выражение, может быть повторено сколь угодно много раз.
В строке "fo*", символ "*" применяется к символу "o', так "fo*" задает "f" с
последующим любым количеством символов "o".

В случае нулевого количества символов "o" строка "fo*" будет также
соответствовать "f".

Символ "*" Всегда применяет к *наименьшему* возможному предшествующему
выражению. Таким образом, "fo*" задает повторение "o", а не повторение "fo".

Процесс сравненияr обрабатывает конструкцию "*", пытаясь согласовать настолько
много повторений насколько много их их может быть найдено. Затем он продолжает
обработку остальной части шаблона. Если, впоследствии, появится несоответсвтие с
шаблогам, происходит возврат, путем отбрасывания некоторых повторений "*", в
случае, если это делает возможным совпадение остальной части шаблона. Например,
шаблон "c[ad]*ar" для строки "caddaar", "[ad]*" сначала совпадает с "addaa", но
это не позволяет совпасть следующему символу "a" в шаблоне. Так последнее
совпадение "[ad]" отменяутся, и следующий символ "a" пробуется вновь. Теперь
шаблон сооветствует.

+' "+" Подобен "*" за исключением того, что требуется по крайней мере одно
соответствие для предшествующего образца. Таким образом, "c[ad]+r" не совпадает с
"cr", но совпадет с чем либо еще что может быть задано шаблоном "c[ad]*r".

?' "?" Подобен "*" за исключением того, что позволяет задать нуль или более
соответствий для заданного шаблона. Таким образом, шаблон "c[ad]?r" будет задавать
строки "cr" или "car" или "cdr", и ничего больше.

[ ... ]' "[" начинает "множество символов", которое завершается символом "]".
В самом простом случае, символы между этими двумя скобками формируют множество.
Таким образом, "[ad]" задает символы "a" или "d", и "[ad]*" задает любоую п
оследовательность символов "a" и "d" (включая и пустую строку), из чего следует,
что шаблон "c[ad]*r" задает "car", и т.д.

Диапазон символов также может быть включен в множество символов, с помощью
символа "-", помещенного между двумя другими. Таким образом, шаблон "[a-z]" задает
любой символ нижнего регистра. Диапазоны могут свободно перемежаться с одиночными
символами, как в шаблоне "[a-z$%.]", который задает любой символ нижнего регистра
или символы "$", "%" или точку.

Обратите внимание, что символы, обычно являющиеся специальными, внутри
множества символов больше не являются таковыми. Внутри множества символов
существует полностью отличный набор специальных символов : "]", "-" и "^".

Для того чтобы включить "]" в множество символов, нужно сделать его первым
символом. Например, шаблон "[]a]" задает символ "]" или "a". Чтобы включить символ
"-", нужно использовать его в таком контексте, где он не может указывать диапазон:
то есть или первым символом, или сразу после диапазона.

[^ ... ]' "[^" начинает "исключающее множество символов", который задает любой
символ за исключением заданных. Таким образом, шаблон "[^a-z0-9a-z]" задает любой
символ *за исключением* букв и цифр. "^" не является специальным символом в
множестве, если только это не первый символ. Символ следующий после "^"
обрабатывается так, как будто он является первым (это может быть "-" или "]").

^' Является специальным символом, который задает пустую строку - но только в
случае если он стоит в начале строки шаблона. Иначе шаблон не будет
соответствовать. Таким образом, шаблон "^foo" задает "foo" в начале строки.

$' Подобен "^", но только задает конец строки. Так шаблон, "xx*$" задает
строку с одним или более символом "x" в конце строки.

' Имеет два значения: экранирует вышеперечисленные специальные символы
(включая ""), и задает дополнительные специальные конструкции.

Так как "" экранирует специальные символы, "$" является регулярным
выражением, задающим только символ "$", а "[" является регулярным выражением,
задающим только "[", и так далее.

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

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

|' Задает альтернативу. Два регулярных выражения a и b с "|" между ними
формируют выражение, которое задает что-либо чему соответствует или А или b.

Так выражение, "foo|bar" или "foo" или "bar", но никакую другую строку.

"|" применяется к максимально большим окружающим выражениям. Только "(...)"
вокруг выражений могут ограничивать мощность "|".

Существует полная возможность перебора с возвратами , когда задано множество
"|".

( ... )' является конструкцией группирования , которая служит трем целям: 1.
Заключать в себя множество "|" альтернатив для других операций. Так, шаблон
"(foo|bar)x" соответствует или "foox" или "barx".

2. Включать сложное выражение для постфиксного "*". Так шаблон "ba(na)*"
задает "bananana", и т.д., с любым (ноль или болеее ) количеством "na".

3. Отметить искомую подстроку для последующего обращения.

Эта последняя функция - не следствие идеи относительно группировки выражений
скобками; это - отдельная особенность, которая задает второе значение для той-же
самой конструкции "(...)" , так как нет практически никакого конфликта между
этими двумя значениями. Вот объяснение этой особенности:

digit' После окончания конструкции "(...)" , анализатор запоминает начало и
конец текста, совпавшего с этой конструкцией. Затем, позднее в регулярном
выражении можно использовать "" с поледующей цифрой (digit), что означает "задать
тот же самый текст, который соответствовует digit нахождению в конструкции
'(...)'". "(...)" конструкции пронумерованы в порядке возрастания в регулярном
выражении.

Строкам задающим первые девять конструкций "(...)" , появляющимся в
регулярном выражении - соответствуют числа от 1 до 9. "1" до "9" может быть
использовано для обращения к тексту, соответствующей "(...)" конструкции. Эти 9
сохраненных конструкций известны также как регистры.

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

Сохраненные конструкции или регистры могут использоваться внутри одиночных
выражений, или, они могут быть извлечены и использоваться где-либо еще. Добавление
третьего параметра к reg_match() или reg_search() определит массив, в который
будут записаны 9 регистров. При этом записывается дополнительный регистр (нулевой
элемент) в котором задана строка совпавшая со всем выражением. Например:

<?$string = "this is a test"; $cnt = reg_match("(w*).*(") echo $cnt; echo
$regs[0]; echo $regs[1]; echo $regs[2]; >

Вышеупомянутое сначала напечатает количество совпавших символов (14 в этом
случае) и затем всю совпавшую строку, споследующим первым словом строки и
последним.

b' Задает пустую строку, но только, если она находится в начале или в конце
слова. Таким образом, "bfoob" соответствует любому местонахождению "foo" в виде
отдельного слова. "bball(s|)b" соответствует "ball" или "balls" в виде
отдельных слов.

b' Задает пустую строку, если она не в начале или не в конце слова.

<' Задает пустую строку, но только, если она - в начале слова.

>' Задает пустую строку, но только, если она в конце слова.

w' Задает любой символ, являющийся составной частью слова.

w' Задает любой символ, который - не является составной частью слова.

 


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

$s = implode($a,$c); Мы уже познакомились с этой функцией в прошлом выпуске.
Она позволяет соединять все элементы массива в одну строку. Здесь $s - строка, в
которую будет помещен результат, $a - массив, $c - шаблон. Шаблон это набор
символов для склейки строк. Этот набор будет вставлен между всеми элементами
массива. Например, имеем такой массив:

$a[0] = "string1"; $a[1] = "string2"; $a[2] = "string3";

Соответственно, функция implode($a, "***") вернет нам строку
"string1***string2***string3".

$a = explode($c,$s); Функция explode является обратной implode. Она разбивает
строку $s используя шаблон $c и помещает элементы в массив $a. Например, если
взять строку "string1*string2*string3" и выполнить функцию $a = explode("*",$s),
то получим такой массив:

$a[0] = "string1"; $a[1] = "string2"; $a[2] = "string3";

$a = split($c,$s); Работа фунции абсолютно идентична explode, за тем
исключением, что в ней можно использовать регулярные выражения. Это означает, что
уже нельзя для простой разбивки строки использовать символ "*", так как он
является регулярным выражением (см. раздел выше). Поэтому для разбивки строки
можно использовать какий-нибудь другой символ, например, "~".

ereg($c,$s); Функция ereg возвращает истину, если в строке $s найдено
соответствие регулярному выражению $c. $c здесь это любой набор описанных в
предыдущем разделе регулярных выражений. Например, мы имеем строку $s = "here is
testing string". Функция ereg("^here.*",$s) вернет истину, так как в регулярном
выражении указывается, что слово here должно быть в начале строки (спец. символ
"^" указывает на это), а после этого слова могут идти любые символы (конструкция
".*"). Вот пример программы, которая проверяет это соответствие:

<? $s = "here is testing string"; if (ereg("^here.*",$s)) echo "Найдено!";
else echo "Не найдено."; ?>

А вот небольшой пример, который ищет шаблон в любой части слова: <? $s = "here
is testing string"; if (ereg(".*testing.*",$s)) echo "Найдено!"; else echo "Не
найдено."; ?>

$s = ereg_replace($c,$c1,$s); Эта функция заменяет все символы в строке $s,
подходящие под регулярное выражение $c на символы $c1. Вот пример, в котором мы
заменяем все цифры в строке на знаки "+":

<? $s = "1 here 2 is 3 testing 4 string 5"; $s = ereg_replace("[0-9]","+",$s);
echo $s; ?>

Как видите, функция возвращает результат в заданную переменную. $s =
str_replace($c,$c1,$s); Работа функции аналогична ereg_replace, за тем
исключением, что в параметре $c нельзя использовать регулярные выражения. Эту
функцию можно использовать, когда у вас нет сложного шаблона для замены, а нужно
произвести простой поиск и замену нескольких символов. Например, функция $s =
str_replace("*", "+", "str1*str2*str3") заменит в заданной строке все символы "*"
на символы "+".

Дмитрий. email: dmitry@runweb.ru




Рубрика: PHP




VivaMP - инструмент для OpenMP.

OpenMP

Инструмент для программистов VivaMP предназначен для помощи разработчикам параллельных программ на базе OpenMP. В статье приведен краткий обзор программного продукта.


Подробнее... | Рубрика: OpenMP | Добавлено: 05.12.2008

Создаем контекстно-зависимое WPF-приложени....

Windows 7

Начинаем цикл публикаций, призванных помочь начинающим программистам в создании контекстно-зависимых приложений для Windows 7. Об этом много говорили на PDC да и мы неоднократно писали о этом новом классе приложений. Пользователи Windows 7 build 6801 могли заметить появление в гаджете погоды опции автоматического определения местоположения компьютера. И сегодня у вас появилась уникальная возможность попробовать себя в создании подобных приложений.


Подробнее... | Рубрика: Windows 7 | Добавлено: 05.12.2008

Windows Vista SP2: что внутри и что важно?.

Windows Vista

В связи с началом программы Customer Preview Program (CPP) для Windows Vista® Service Pack 2 (SP2) хотелось бы вкратце рассказать об основных особенностях этого пакета, а также призвать вас к его загрузке и тестированию. Windows Vista SP2 представляет собой традиционный пакет сервисных обновлений, включающий все накопительные обновления безопасности, выпущенные с момента релиза SP1 в марте 2008 года. Кроме того, Windows Vista SP2 добавляет поддержку новых типов устройств и развивающихся стандартов, которые обретут популярность уже в ближайшее время, и включает все хотфиксы, обнаруженные через программу улучшения качества ПО (CEIP).


Подробнее... | Рубрика: Windows Vista | Добавлено: 05.12.2008

Остальные статьи:

Вышел MySQL 5.1.30, первый стабильный рели...
Тестирование параллельных программ
Архитектура AMD64 (EM64T)
Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия