substr(PHP 3, PHP 4) substr - возвращает часть строки. Описаниеstring substr (string string, int start [, int length]) Substr возвращает часть строки string, специфицированную параметрами start и length. Если start положительный, возвращаемая строка начинается со start'овой позиции в string, отсчитываемой от нуля. Например, в строке 'abcdef' символ в позиции 0 это 'a', символ в позиции 2 это 'c', и так далее. Если start отрицательный, возвращаемая строка начинается со start'ового символа, считая от конца строки string.
Если length задан и положительный, возвращаемая строка будет содержать максимум length символов, начиная со start (в зависимости от длины строки string. Если string меньше start, возвращается FALSE). Если length задан и негативный, то это количество символов будет пропущено, начиная с конца string (после вычисления стартовой позиции, когда start негативный). Если start задаёт позицию за пределами этого усечения, возвращается пустая строка.
|
||||||||||
|
||||||||||
Рассмотрим проблему совпадения строки в скобках, когда допускается неограниченное
вложение скобок. Без использования рекурсии лучшее, что можно сделать, это использовать
патэрн, который совпадает на некоторую фиксированную глубину вложения. Невозможно
обработать вложения на произвольно большую глубину. В Perl 5.6 имеется экспериментальная
возможность, позволяющая (помимо прочего) выполнять рекурсию регулярных выражений.
Специальный элемент (?R) предоставлен для этого специфического case/варианта
рекурсии.
PCRE-патэрн разрешает проблему скобок (предполагая, что опция PCRE_EXTENDED
установлена так, что пробел игнорируется):
\( ( (?>[^()]+) | (?R) )* \)
Вначале он совпадает с открывающей скобкой. Затем - с любым количеством подстрок,
которые могут быть либо последовательностями не-скобок, либо рекурсивным совпадением
самого патэрна (т.е. корректно заключённой в скобки подстрокой). Наконец, идёт
закрывающая скобка.
Этот особый пример патэрна содержит вложенное бесконечное повторение, и, таким
образом, использование однократного субпатэрна для совпадения со строками из
не-скобок очень важно, когда патэрн применяется к строкам, которые не
совпадают. Например, если его применить к
(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
то он быстро даст "нет совпадений". Однако, если однократный/once-only
субпатэрн не используется, поиск совпадения будет продолжаться длительное время,
так как есть много различных способов, которыми повторения + и * могут кроить
строку-субъект, и все они должны быть проверены, прежде чем будет выдано сообщение
о неудаче поиска.
| |