Функции Язык программирования PHP

sscanf

(PHP 4 >= 4.0.1)

sscanf - разбирает ввод строки в соответствии с форматом.

Описание

mixed sscanf (string str, string format [, string var1])

Функция sscanf() это input-аналог printf(). sscanf() читает из строки str и интерпретирует её в соответствии со специфицированным форматом format. Если этой функции передано только два параметра, разобранные значения будут возвращены как массив.

Любой пробел в строке формата совпадает с любым пробелом в строке ввода. Это означает, что даже tab \n в строке формата может совпадать с одиночным пробельным символом в строке ввода.

Пример 1. sscanf()
// 
получение серийного номера $serial = sscanf("SN/2350001","SN/%d"); // и даты изготовления 
$mandate = "January 01 2000"; list($month, $day, $year) = sscanf($mandate,"%s 
%d %d"); echo "Item $serial was manufactured on: $year-".substr($month,0,3)."-$day\n";

Если переданы необязательные параметры, функция возвращает количество присвоенных значений. Необязательные параметры обязаны передаваться по ссылке.

Пример 2. sscanf() - использование необязательных параметров
// 
получить author info и сгенерировать вхождение DocBook $auth = "24\tLewis Carroll"; 
$n = sscanf($auth,"%d\t%s %s", &$id, &$first, &$last); echo "<author 
id='$id'> <firstname>$first</firstname> <surname>$last</surname> 
</author>\n";

См. также fscanf(), printf() и sprintf().


Назад Оглавление Вперёд
sprintf Вверх str_pad

Once-only/"Однократные" субпатэрны

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

^(?>.*)(?<=abcd)

то может не быть возвратов назад для элемента .* item; он может совпасть только с целой строкой. Последующее утверждение назад выполняет простую проверку последних четырёх символов. Если она терпит неудачу, совпадение терпит неудачу немедленно. Для длинных строк этот подход имеет значительное отличие во времени выполнения.

Если патэрн содержит неограниченное повторение внутри субпатэрна, который сам может повторяться неограниченное количество раз, использование once-only субпатэрна оказывается единственным способом избежать неудачных совпадений, которые длятся достаточно продолжительное время.
Патэрн

(\D+|<\d+>)*[!?]

совпадает с неограниченным количеством подстрок, которые либо состоят из не-цифр, либо из цифр, заключённых в <>, с последующим ! или ?. Если совпадение есть, оно выполняется быстро. Однако, если применит патэрн к

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

будет затрачено много времени, прежде чем будет сообщено о неудаче.