/ Документы / PHP для начинающих

PHP для начинающих

Краткая Хронология
Модуль PHP начал жизнь как простая небольшая cgi оболочка, написанная на Perl. Я написал это за полдня между контрактами, поскольку нуждался в быстром инструменте для отслеживания тех, кто читал мое интерактивное резюме. Даже не предполагалось, что оболочка будет использоваться кем-то кроме меня. Узел сети, на котором лежало мое резюме, был чрезвычайно перегружен и имел постоянные проблемы с "форканьем" процессов. Я переписал Perl-оболочку на C, чтобы избавиться от значительных непроизводительных затрат из-за необходимости запуска Perl при каждом обращении к моему резюме.
В конечном счете другие люди на том же самом web сервере натолкнулись на мою оболочку и спросили, могут ли они использовать ее. Затем, как неизбежно случается, они начали просить о большем количестве особенностей. Я добавил большее количество особенностей и в заключение собрал наполовину дистрибутив наряду с документацией, списком адресатов и FAQ. Имя этого первого пакета было Персональные Инструментальные средства для домашней страницы (PHP), которые позже стали Персональным комплектом создания домашней страницы.
В то же самое время я начал играть с базами данных и написал инструмент для включения запросов SQL в web страницы. Это была отдельная CGI-оболочка, которая анализировала запросы SQL и облегчала создание форм и таблиц, основанных на этих запросах. Этот инструмент был именован Интерпретатор Форм (Form Interpreter <FI>).
PHP/FI версии 2.0 - полная перезапись из этих двух пакетов, объединенных в одиночную программу. Это теперь развилось по сути в простой язык программирования, внедренный внутрь HTML файлов. Первоначальный акроним, PHP, прижился, правда теперь не соответствует действительности. PHP/FI сегодня используется больше для создания целых web серверов, чем для малых домашних страниц. Модуль устраняет потребность в многочисленных малых cgi программах на Perl, позволяя Вам поместить простые скрипт-программы непосредственно в ваши HTML файлы. Это увеличивает общую производительность ваших web страниц, хотя бы потому что нет непроизводительных затрат на запуск Perl-а. Пакет также упрощает управление большими web серверами, помещая все компоненты web страницы в одиночном файле html. Всторенная поддержка различных баз данных делает тривиальной разработку web страниц с доступом к базам данных. Многие находят, что иметь дело с внедренным в html-документы языком намного проще, чем создавать отдельные HTML и CGI файлы .
В этой документации любые ссылки PHP, FI или PHP/FI все относятся к одному и тому же. Различие между PHP и FI - только концептуальное. И PHP и FI созданы из одного и того же исходного текста. Когда я формирую пакет данных без какой-либо регистрации доступа или поддержки ограничения доступа, я вызываю мой выполняемый модуль FI. Когда я форматирую документы, используя эти опции, я называю его PHP.

Скрипт язык PHP/FI
Скрипт язык PHP подобен по синтаксису языку C по многим показателям. Он поддерживает переменные, массивы, обращения к функциям, различные типы переменных и множество других вещей, которые вам могут потребоваться для написания сложных cgi программ.
В последующих разделах описана каждая функция PHP/FI и они могут быть быстро найдены простым добавлением #function_name к url этого документа, так как каждое функциональное описание снабжено тэгом имени.

Синтаксис
Каждая команда PHP начинается с тэга <? и заканчивается >. Или команды могут быть сгруппированы внутри одной пары <? > и отделяться друг от друга символом ; .
Поддерживаются переменные, имена переменных начинаются с символа $. Так например, чтобы присвоить значение 5 переменной a и затем отобразить ее, можно написать следующий фрагмент:
<?$a = 5>
<?echo $a>
Это можно записать также в виде:
<; $a = 5; echo $a >
Или даже:
<
$a = 5;
echo $a;
>
Лишние символы пробела, табуляции и новой строки игнорируются. Это нужно для того чтобы форматировать блоки программы PHP, для болшего удобства чтения. Регистр написания имеет значение для имен переменных, но не для имен функций. Позже в этой документации, при обзоре функций, регистр используется только для того, чтобы сделать имена функций более читабельными. В фактической программе Вы можете использовать любой регистр, который пожелаете. Комментарии поддерживаются. Комментарии записываются точно так же как комментарии в Языке C. /* начинает комментарий, */ заканчивает комментарий. Комментарии могут быть помещены в любом месте внутри блока <? ... >.

Переменные
Поддерживаются три типа переменных. Длинные целые (long int) , двойной точности с плавающей запятой (double) и символьные строки (strings). Тип переменных обнаруживается автоматически. Например:
<?$a = 5>
Заставляет $a стать переменной типа INTEGER.
<?$a = 5.0>
Заставляет $a стать переменной типа DOUBLE.
<?$a = "5">
Заставляет $a стать переменной типа STRING.
Тип переменной вообще-то не очень важен. Каждая переменная, независимо от типа, преобразуется в любой из трех типов, внутренне и различные функции пробуют использовать правильный тип. Есть только несколько функций, для которых важен тип переменной.
Все три типа переменных могут также рассматриваться как массивы, если к их именам добавляется [значение]. В отличие от C, массивы в PHP фактически представляют собой ассоциативные массивы, подобные тем, которые используются в Perl. Следующая запись корректна:
<?
$a[0] = 5;
$a["hello"] = 6;
echo $a[0];
echo $a["hello"];
>
Обратите внимание, что, если имя переменной используется, и как массив и как обычная переменная, то имя обычной переменной является синонимом элементу массива с индексом "0". То есть.
$a = 1;
Это тоже самое что:
$a[0] = 1;
PHP/FI также поддерживает не-индексированные массивы. Не-индексированный массив генерирует собственный индекс, по мере добавления элементов к нему. Например:
$a[] = "Hello";
$a[] = "There";
Первому элементу, вставляемому в не-индексированный массив, всегда присваивается индекс 0, второму 1 индекс, и т.д. Следовательно вышеупомянутые элементы могут быть распечатаны с помощью:
echo $a[0];
echo $a[1];
Вы можете использовать функцию count(), для того чтобы определить количество элементов для любого массива.
Еще одно свойство языка, это то что тип переменной определяет, какие основные операции могут быть выполнены. Например:
$a = $b + $c;
Может вести себя двояко. Если $b это число, то числовое значение $c добавляется к $b, и сумма сохраняется в $a. В этом случае тип $c не важен. Операция управляется типом первой переменной. Если $b строка, то значение строки $c сонкатенируется с $b, и результирующая строка помещается в $a. Это также приводит к некоторым недоразумениям. Вам нужно прочесть раздел по перегруженным операторам, чтобы получить лучше понимание этого факта.

Ассоциативные массивы
В предыдущем разделе мы познакомились с ассоциативными массивами. Ассоциативный массив - это массив, в котором индекс не обязательно должен быть последовательным рядом числовых значений. Индексом массива может быть любое число или строка. PHP/FI обеспечивает набор функций, чтобы манипулирования этими ассоциативными массивами. Это: Next(), Prev(), Reset(), End(), и Key().

Ссылки на переменные
Иногда удобно иметь способ ссылаться на имена переменных . То есть имя переменной может установливаться и использоваться динамически. Нормальной переменной присваивается значение оператором типа:
$a = "hello";
При использовании ссылки на переменную берется значение переменной и обрабатывается как имя переменной. В вышеупомянутом примере, hello, может использоваться как имя переменной, используя два знака $. То есть.
$$a = "world";
На этот момент определены две переменных и сохранены в дереве символов PHP/FI:
Имя переменной Содержимое переменной
a hello
hello hello world
Следовательно, оператор:
echo "$a $$a";
Произведет точно такой же вывод как и:
echo "$a $hello";
То есть. Они выведут строку: hello world

Конструкции Языка
Раз уж затронуты языковые конструкции, следует сказать, что язык PHP совершенно прост. Следующие команды используются, для управления ходом выполнения:
• if(условие)
• else
• elseif(условие)
• endif
• switch(выражение)
• case выражение
• default
• break
• endswitch
• while
• endwhile
• include
• exit
Синтаксис условных выражений подобен синтаксису в языке C. == проверка на равенство.!= означает не равно. Также поддерживаются: >, <, >=, <=. Условное И - &&, условное ИЛИ - ||.
Примеры:
<?
if($a==5 && $b!=0 );
$c = 100 + $a / $b;
endif;
>
Этот пример может быть записан в стандартном синтаксисе C:
<?
if($a==5 && $b!=0) {
$c = 100 + $a / $b;
}
>
Нет никакого различия между двумя синтаксисами. Мне лично больше нравится использовать endif, endswitch и endwhile, так что я точно знаю, какую конструкцию я заканчиваю. Однако, эти конструкции окончания могут быть всегда заменены на закрывающую фигурную скобку.
Важно обратить внимание, что управление не зависит от организации блоков скриптов внутри кода. Вы можете начать выражение if в одном блоке и закончить выражение в другом. Например:
<?if($a==5 && $b!=0)>
<b>Normal html text</b>
<?endif>
Этом пример наглядно демонстрирует, почему иногда желательнее использовать ключевое слово endif вместо закрывающей фигурной скобки. Это намного более читаемо чем следующий фрагмент:
<?if($a==5 && $b!=0) {>
<b>Normal html text</b>
<? } >
Обе версии верны, и они будут делать одно и тоже.

Функции определяемые пользователем
Вы можете определять функции внутри программы PHP со следующим синтаксисом:
<?
Function Test (
echo "This is a test\n";
);
>
Эта функция теперь может быть вызвана из любого места в программе, после ее определения. Типичный вызов может быть:
<?
Test();
>
Определяемые пользователем функции действуют подобно внутренним функциям PHP, Вы можете передавать им аргументы получать возвращаемое значение. Ниже приводится синтаксис для определения функции, с 3-мя аргументами и, возвращает их сумму:
<?
Function Sum $a,$b,$c (
return($a+$b+$c);
);
echo Sum($a,$b,$c);
>
Оператор return используется для возврата значения из функции. Только одиночное значение может быть передано, используя этот механизм, однако, если должно передаваться большее количество значений между функцией и основным кодом, то для этой цели могут быть использованы глобальные переменные. Это приводит нас к разделу по области видимости переменных.

Область видимости переменных
Область видимости переменной это контекст, внутри которого она определена. Главным образом все переменные PHP/FI имеют только одину область. Однако, внутри определяемых пользователем функций действует локальная для функции область видимости. Любая переменная, используемая внутри функции по умолчанию ограничена локальной областью видимости. Например:
$a=1; /* глобальная переменная */
Function Test (
echo $a;/* ссылка на локальную переменную */
);
Test();
Эта программа ничего не выведет, так как оператор echo работает с локальной версией переменной $a , и ей не было присвоено значение внутри этой области видимости. Вы можете обратить внимание, что это немного отличается от языка C, где глобальные переменные автоматически доступны функциям, если только специально не отменяются локальным определением. Это может вызвать некоторые проблемы, в случае когда люди могут неосторожно изменять глобальную переменную. В PHP/FI глобальная переменная должна быть объявлена глобальной внутри функции, если предполагается что она будет использоваться в этой функции. Пример:
$a=1;
$b=2;
Function Sum $first,$second (
global $a,$b;
$b = $a + $b;
);
Sum();
echo $b;
Эта прграмма выведет "3". После объявления $a и $b глобальными внутри функции, все ссылки к любой из них будут относится к их глобальной версии. Нет никакого ограничения на число глобальных переменных, которые могут использоваться функцией. Однако, переменная должна существовать в глобальной области видимости до вызова функции. Нельзя создать новые глобальные переменные изнутри функции.
Другая важная особенность областии видимости переменных это статические переменные. Статическая переменная существует только в локальной области видимости, но при этом не теряет своего значения, когда выполнение программы оставляет эту область. Рассмотрите следующий пример:
Function Test (
$a=0;
echo $a;
$a++;
);
Эта функция совершенно бесполезна, так как, каждый раз при вызове, она устанавливает $a в 0 и печатает "0". Оператор $a++, который увеличивает переменную, не дает никакого результата, так как, как только проиходит выход из функции переменная $a исчезает. Чтобы сделать полезную функцию подсчета, которая не будет терять значения текущего счетчика, переменная $a объявляется статической:
Function Test (
static $a=0;
echo $a;
$a++;
);
Теперь, каждый раз при вызове функции Test(), она будет печатать значение $a и затем увеличивать его.
Без статических переменных не обойтись и в том случае, когда функция вызывается рекурсивно. Рекурсивная функция это функция, вызывающая саму себя. При написании рекурсивных функций требуется проявлять осторожность, так как возможна ситуация когда функция будет вызывать саму себя постоянно. Нужно удостовериться, что есть адекватный способ завершения рекурсии. Следующая простая функция рекурсивно считает до 10:
Function Test (
static $count=0;
$count++;
echo $count;
if($count < 10 {
Test();
}
);

Математические Выражения
PHP поддерживает полный набор математических операций, в выражениях. Учитывается порядок операций. Следующие операторы допустимы:
<? $a = 2 + 1 > Сложение
<? $a = 2 - 1 > Bычитание
<? $a = 2 * 1 > Умножение
<? $a = 2 / 1 > Деление
<? $a = 2 % 1 > Деление по модулю
Поддерживаются и скобки и порядок операций, так что следующая запись верна:
<?$a = (2"+1")*3+6/3>
Поддерживаются C-подобные операторы увеличения += и уменьшения -= . То есть.
<? $a += $b>
Это эквивалентно:
<? $a = $a + $b>
Поддерживаются C-подобные поразрядные операторы =& и |=. То есть.
<? $a &== 4>
Это эквивалентно:
<? $a = $a & 4>

Циклы While
Вы можете зацикливать управление внутри программы PHP, используя конструкцию while(); endwhile;.
<?
$a=0;
while($a <100) {
$a++;
echo $list[$a];
}
>
Вышеупомянутый пример показывает использование цикла while, чтобы отобразить содержимое массива. ПРЕДУПРЕЖДЕНИЕ, хотя язык PHP поддерживает операторы типа ++ и -- для увеличения или уменьшения переменной, они не обрабатываются точно так же как в языке C . В PHP нет концепции пре- и пост- инкрементирования как это есть в С. Как объяснянолось в разделе Конструкции Языка, выше, тоже может быть получено и с циклом while(); endwhile;.

Конструкция Switch
PHP поддерживает switch конструкцию очень похожую на эквивалентную в C.
<?
$a=0;
switch($a) {
case 1;
echo "a is 1";
break;
case "hello";
echo "a is hello";
break;
default;
echo "a is unknown";
break;
}
>
Выше - пример конструкции switch. Она подобна последовательности конструкций if/elseif/else, но более легко читаема. Единственое различие между конструкцией switch PHP и подобным ему в C - это, что в конце каждой строки используется точка с запятой. Нет никаких двоеточий. Как объяснялось в раздел Конструкции Языка, выше, тот же самое может быть получено с switch(); endswitch;.
Все эти конструкции могут быть конечно же вложены и использоваться друг внутри друга, точно так же как в C. Различные файлы в каталоге примеров дистрибуции PHP обеспечат хорошую отправную точку для изучения языка.

Перегруженные Операторы и работа с типами данных
Перегруженный оператор - это оператор подобный например '+' , который может делать различные, основываясь на типах выражений, к которым он применяется. Проблема состоит в том, что PHP понимает 3 типа переменных. Integer, Double и String. Когда переменной впервые присваивается значение, PHP автоматически оперделяет тип этой переменной.
То есть.
$a = 1; Тип будет integer
$b = 1.5; Тип будет double
$c = "1"; Тип будет string
Теперь, что произойдет, если Вы сделаете что-нибудь вроде:
$d = $a + $c;
Синтаксический анализатор рассматривает первую часть арифметического выражения и использует его для результата а также характер действия, которое должно быть выполнено. В вышеупомянутом прмере, так как $a - integer, $d будет тоже integer, и выполнение целочисленного сложения , даст результат:
$d = 2 Тип integer
Следовательно:
$d = $c + $a
Результаты в:
$d = "11" Тип - string
Вышесказанное имеет смысл для меня, и как только Вы поймете это, это будет возможно осуществимо и для вас. Однако, когда используются более сложные выражения, это может привести к чрезвычайной путанице.
Решение состоит в механизм простого приведения типа .
Фактически все переменные автоматически преобразовываются во все 3 типа, и только внутренний флажок отмечает, какого типа переменная, фактически. Так, когда я говорю:
$a = 1;
Внутри в таблице идентификаторов я сохраняю 3 версии.
Integer: 1 <--- flag
Double: 1.0
String: "1"
Функция SetType() может перемещать флажок, указывающий тип переменной.
SetType($a,"double");
Это вынудит рассматривать $a, как double в дальнейшем.
Функция GetType() возвращает тип.
GetType($a) вернет, в этом случае, "double" .
Также существуют функции для того, чтобы возвратить 3 различных типа без перемещения флажка типа.
IntVal($a) вернет 1
DoubleVal($a) вернет 1.0
StrVal($a) вернет "1"
Перегруженный оператор не изменяет характер переменных PHP, но дает Вам некоторые инструментальные средства, для лучшей работы с ними. PHP - не нечто, что напоминало бы не вполне развитый Perl. PHP должен быть малым и быстрым. Perl имеет дело ловушкой перегруженных операторов, заставляя оператор вроде '+' работать только с числами. Если Вы суммировать строки, нужно использовать оператор '.'. Как только появляются отдельные операторы для каждого типа, это делает язык намного более сложным. То есть. Вы не можете использовать '==' для строк, Вам придется использовать 'eq'. Я не вижу смысла, особенно для чего-то вроде PHP, где большинство скриптов будут довольно простыми и в большинстве случаев, написанными непрограммистами, которые хотят язык с базовым логичным синтаксисом, который не требует больших навыков.

Регулярные Выражения
Регулярные выражения используются для сложного манипулирования строками в PHP/FI. Поддержка интерфейса между скриптом и регулярными выражениями осуществляется через следующие функции: Reg_Match(), Reg_Replace(), и Reg_Search(). Первым аргументом для всех трех функций - это строка, задающая регулярное выражение. Этот строка состоит из регулярных и специальных символов. Регулярные символы имеют то же значение что и при в других командах Unix, в то время как специальные символы имеют специальное значение. Далее следуюет - полный список специальных символов и их значения как это воспринимает синтаксический анализатор PHP/FI:

`.'
Является специальным символом, который соответствует любому символу, за исключением символа новой строки. Используя конкатенацию, мы можем задавать регулярные выражения подобно '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'
Задает пустую строку, но только, если она находится в начале или в конце слова. Таким образом, "\bfoo\b" соответствует любому местонахождению "foo" в виде отдельного слова. "\bball\(s\|\)\b" соответствует "ball" или "balls" в виде отдельных слов.
`\B'
Задает пустую строку, если она не в начале или не в конце слова.
`\<'
Задает пустую строку, но только, если она - в начале слова.
`\>'
Задает пустую строку, но только, если она в конце слова.
`\w'
Задает любой символ, являющийся составной частью слова.
`\W'
Задает любой символ, который - не является составной частью слова.