D – любой символ, не являющийся десятичной цифрой;
s – любой пустой символ (пробел или табуляция);
S – любой символ, не являющийся пустым;
w – символ, используемый для написания Perl-слов (это буквы, цифры и символ подчеркивания), так называемый «словарный символ»;
W – несловарный символ (все символы, кроме определяемых w).
Что имеется в виду под «символьным типом»? Просто каждый метасимвол принимает значение (одно) из класса возможных значений, заданных автоматически или вручную. Символьные типы, задаваемые пользователем, описываются с помощью квадратных скобок (подробнее об этом позже). Выше приведены символьные типы, диапазон значений которых заранее определен языком программирования.
Пример использования приведенных выше метасимволов:
/ddd plus d is www/
Это РВ означает: трехзначное число, за которым следует подстрока plus, любая цифра, затем is и слово из трех словарных символов. В частности, данному РВ удовлетворяют строки: «123 plus 3 is sum», «213 plus 4 is 217».
Вообще различают два множества метасимволов: те, что распознаются в любом месте шаблона, за исключением внутренности квадратных скобок, и те, что распознаются внутри квадратных скобок.
Квадратные скобки [ ] применяются для описания подмножеств и внутри регулярного выражения рассматриваются как один символ, который может принимать значения, перечисленные внутри этих скобок. Однако если первым символом внутри скобок является ^, то значением символьного класса могут быть только символы, НЕ перечисленные внутри скобок.
Примеры:
- Символьный класс [абвгд] задает один из символов а, б, в, г, д, а класс [^абвгд] задает любой символ, кроме а, б, в, г, д.
- Если написать [2бул]ки], то это выражение интерпретируется как один из символов 2, б, у, л, за которым следует строка ки], потому что первая встретившаяся закрывающая квадратная скобка (разбор происходит слева направо) заканчивает определение символьного класса. То есть это РВ совпадет с одной из строк 2ки], бки], уки] или лки].
- С помощью РВ [0-9А-Яа-я] можно задать любую букву или цифру.
Метасимволы, распознаваемые вне квадратных скобок, можно разделить на группы следующим образом: определяющие положение искомого текста в строке, связанные с подвыражениями, ограничивающие символьный класс, квантификаторы и перечисление альтернатив.
Примеры (^ и $)
$str = '11 aaa bbb '.
'ccc 22 ddd '.
'eee ggg 33';
Переходный символ со множеством назначений
^
Отрицание класса, но только если это первый символ (например, «^d» задает все, кроме цифр)
-
Задает диапазон символов (например, «0-9» задает все цифры, «A-Z» – все латинские буквы)
]
Вычисляет символьный класс
Регулярное выражение /dd/m может быть сопоставлено следующим подстрокам: 11, 22, 33. Если в начале РВ стоит ^, то совпадения ищутся в начале строки, поэтому выражение /^dd/m найдет только 11.
Когда в конце РВ стоит знак доллара $, поиск производится в конце строки, поэтому выражение /dd $/m найдет только 33.
Шаблону же /^ddd$/ будет удовлетворять строка, целиком состоящая из трехзначного числа (т.е. она и начинается и заканчивается этим числом).
-
<?
//считываем файл в строку
$str = file_get_contents('1.htm');
$pattern = '!^<[^/]+>!mU';
// осуществляем поиск
$n = preg_match_all ($pattern,
$str, $res);
// выводим результаты
for ($i=0;$i<$n;$i++)
echo htmlspecialchars($res[0][$i]).
'<br>';
?>
Переходный символ со множеством назначений