Поиск и замена строк
Posted in: Многофайловые сценарии PHP, By: admin, At: Ноябрь 25th, 2007
Использование строк без представления о том, что в них содержится, немного похоже на ночную езду на автомобиле с выключенными фарами — вы знаете, что дорога должна быть где-то здесь, но не можете знать этого точио.
РНР предлагает широкий спектр функций для поиска и замены текста внутри строк с использованием как традиционного подхода “поиска и замены”, так и специальной системы, известной под названием регулярных выражений, которая будет описана далее в этой книге.
Простейшая форма поиска состоит в нахождении подстроки в строке. Эта задача обычно выполняется вызовом функции strpos (Shaystack, Sneedle [, SstartJ), которая возвращает false, если Sneedle не может быть найдено в Shaystack; в противном случае функция возвращает позицию первого символа Sneedle внутри Shaystack. Если указан целочисленный параметр Sstart, операция поиска выполняется, начиная с символа Shaystack, положение которого соответствует Sstart.
Например, следующий сценарий возвращает “Строка найдена в позиции 24″:__Основы разработки на РНР ^
~ глава 1 I____J
Shaystack = ‘Трое в лодке, не считая собаки’; Spos = strpos (Shaystack, ‘собаки’); if (Spos === false)
echo “Строка не найдена\п”; else
echo “Строка найдена в позиции Spos\n”;
Имеется одна очень существенная деталь, которую следует отметить о приведенном выше сценарии. Чтобы определить, был ли вызов strpos () успешным и вхождение подстроки ‘собаки’ присутствует внутри Shaystack, значение Spos сравнивается с false с помощью операции проверки равенства с контролем типов ===. Причина этого состоит в том, что булевское значение false равно целочисленному нулю. Однако strpos () возвратит ноль, если искомый фрагмент Sneedle будет найден, начиная с первого символа Shaystack. Таким образом, проверка значения, возвращаемого strpos () с помощью выражения вроде:
if (Istrpos (Shaystack, Sneedle)) die (”Сбой”);
может привести к неожиданной проблеме. Например, следующий сценарий неверно выдаст, что строка’Трое’не может быть найдена внутри строки’Трое в лодке’:
Shaystack = ‘Трое в лодке’;
Spos ■ strpos (Shaystack, ‘Трое’);
if (!Spos)
echo “Строка не найдена\п”; else
echo “Строка найдена в позиции SposSn”;
Несмотря на то, что strpos () выполняет поиск слева направо, можно начать поиск с конца строки и двигаться к началу с помощью функции strrpos (). В отличие от strpos (), однако, strrpos () может искать только один символ. Если вы укажете строку с более чем одним символом в параметре Sneedle, будет принят во внимание только первый символ.
Как и можно было представить, strpos () является функцией, чувствительной к регистру, а поэтому, например, не найдет слово ‘ трое’ в предыдущем примере.
Интересно, что ire существует нечувствительной к регистру альтернативы strpos (). Однако, в РНР определена функция strstr(), которая похожа на strposO и имеет нечувствительной к регистру аналог по имени stristr {).
В отличие от strpos (),strstr О возвращает часть Shaystack, которая начинается с Sneedle. Следующий сценарий, например, вернет ‘Найдена строка: в лодке ‘:
Shaystack = ‘Трое в лодке’;
Spos = strstr (Shaystack, ‘в лодке’);
if (ISpos)
echo “Строка не найдена\п”; else
echo “Найдена строка: Spos\n”;
Использование РНР для разработки Web-приложений_
Часть I
Замена строк
РНР предлагает две основных функции для выполнения простых операций поиска и замены. Первая из них — substr_replace () — может использоваться в случае, когда вам известно положение подстроки, которая должна быть заменена, и ее длина. Например:
Shaystack = ‘Трое в лодке’;
$newstr = substr_replace (Shaystack, ‘яхте1, 7, 5); echo “$newstr\n”;
Этот сценарии вернет ‘ Трое в яхте’. Функция substr_replace () работает, вырезая подстроку из Shaystack, начиная с позиции, указанной в третьем параметре и не обязательной длиной, заданной в четвертом параметре, а затем заменяет ее строкой, переданной во втором параметре.
Естественно, вы не всегда знаете точно, где находится подстрока, которую необ ходимо заменить, — на самом деле может существовать более одного вхождения такой подстроки. Для таких случаев больше подходит функция str_replace (), которая комбинирует поисковые возможности функции strstr () со способностью выполнять замену substr_replace().
Синтаксис str_replace () выглядит следующим образом:
str_replace (Ssearch, Sreplace, Ssubject)
Функция находит все вхождения строки Ssearch внутри Ssubject и заменяет их строкой Sreplace.
Ниже представлен пример, который возвращает ‘ Трое в яхте1:
Shaystack = ‘Трое в лодке’;
Snewstr = str_replace (’лодке’, ‘яхте’, Shaystack); echo “$newstr\n”;
.
Leave a Reply