Обрабатываем строки. Часть 2.

На днях писал пост на тему обработки строк. Вот решил добить эту тему…
Оставшиеся функции для обработки строк я объединил в два класса – функции для выделения подстрок и функции для поиска и замены в строках.

Выделение подстрок

Начнем с одной полезной функции - substr (string, start[, length]). Она выделяет часть строки string длиной length, которая начинается со start-ого символа.

Если задать положительное число в параметре start, то возвращаемая строка будет начинаться с start-ого символа строки string:

<?
$str = substr("abcdef", 1);    // вернет "bcdef"
$str = substr("abcdef", 1, 3); // вернет "bcd"
?>

Если параметр start отрицательный, то возвращаемая строка будет начинаться c start-ого символа от конца строки string:

<?
$str = substr("abcdef ", -1);    // вернет "f"
$str = substr("abcdef ", -2);    // вернет "ef"
$str = substr("abcdef ", -3, 1); // вернет "d"
?>

Если параметр length указан и он положительный, то возвращаемая строка закончится за length символов от начала start. Получится строка с отрицательной длиной (потому что начало будет за концом строки), поэтому возвращаемая строка будет содержать один символ от начала строки string. Если length указан и он отрицательный, то возвращаемая строка закончится за length от конца строки string. Это опять приведет к строке с отрицательной длиной, поэтому возвращаемая строка будет содержать один символ от начала строки start.

Я никого не запутал? ) Потому что сразу сам не понял всего этого, но функция, судя по всему, очень гибкая в настройке.

Пример:

<?
$str = substr("abcdef", -1, -1); // вернет "bcde"
?>

Чтобы лучше понять, как работает эта функция, советую поэкспериментировать самим с ней.

Поиск и замена

Наверно все знают знаменитую комбинацию клавиш CTRL+H в текстовых процессорах типа Microsoft Word. Она позволяет осуществлять поиск и замену одного текстового фрагмента на другой. PHP также имеет функции для осуществления такой замены.

<?
  $str = ‘This is a white rose’;
  $str = str_replace(‘white’, ‘red’, $str); // Результат: This is a red rose
?>

Конечно, мы можем использовать эту функцию и для удаления слов из строки. Достаточно во втором аргументе указать пустую строку:

<?
    $str = ‘This is a white rose’;
    $str = str_replace(‘white’, ‘’, $str); // Результат: This is a  rose
?>

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

Также у функции str_replace есть аналоги для работы с регулярными выражениями ereg_replace и preg_replace, но регулярные выражения - это тема огромная и я рассмотрю ее в отдельной статье.

А если мы хотим выделить подстроку и заменить ее на другую строку, то можно использовать функцию substr_replace.

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

<?
  $pos = strpos(‘hello world’, ‘world’);
  echo $pos; // выведет: 6
?>

А если строка world не найдена? В этом случае функция вернет false, но возвращаемое значение нужно сравнивать оператором = = =, а не = =, поскольку первый учитывает тип операнда:

<?
  $pos = strpos(‘hello world’, ‘string’);
  if (false === $pos) {
    echo ‘Строка не найдена’;
  } else {
      echo ‘Строка найдена на позиции ’.$pos;
  }
?>

Для подсчета количества вхождений подстроки в заданную строку, тоже есть функция - substr_count:

<?
  echo substr_count("вход и выход", "ход"); // 2
?>

Теперь и строки не страшны. Ведь в php с ними можно сделать что угодно, особо не заморачивась.

P.S.: Все функции из этой и предыдущей статьи про строки я бы не советовал заучивать), т.к. и сам вряд ли все запомнил. Решил для себя использовать эти статьи как небольшое справочное руководство по строкам.





Читайте также:



12 Ответов на “Обрабатываем строки. Часть 2.”

  1. lena

    скрипти полезние… А вот защита строк ввода то спец символов ( / $ ) нету… :_(

  2. novice

    Хм, хорошое замечание ) Скоро специально напишу статью про защиту строк от ввода спец-символов.

  3. lena

    Кстати… А можете розказать подробно о BBcode.
    Например как создать форму для вводу даних с возможностю вставки BBcode, ето очень часто используют на форумах для защити даних от спец символов…
    Хотела б услишать ваше мнение….

  4. novice

    Да, я обязательно рассмотрю это в ближайших статьях

  5. lena

    У меня вопрос! как запрограмировать кнопку, чтоб при клике появлялось значение в поле ввода текста…
    например (вставка смайликов)… Нужно очень!
    Если можно, то навидите пример…

  6. novice

    Ну вообще-то это к теме не относится, но могу предположить, что будет примерно так:

    <textarea id="test_id">раз</textarea>

    <a href="javascript:void(0);" onClick="document.getElementById('test_id').innerHTML += 'два'; return false;" rel="nofollow">Вставка</a>
  7. lena

    Очень благадарна за скрипт, только проблема! В Оперене не роботает…
    (Все планиги и скрипти включини), почему не ротает… Незнаю… :-(

  8. novice

    Видимо в опере нельзя изменять свойство элемента innerHTML. Советую копать в эту сторону

  9. увы не все в жизни бывает так как нам хочеться…

  10. dk

    Всё в опере работает и в других браузерах, только не так. Вместо innerHTML нужно использовать value, если память не изменяет…

  11. В этом случае функция вернет false, но возвращаемое значение нужно сравнивать оператором = = =, а не = =, поскольку первый учитывает тип операнда:

    $pos = strpos(‘hello world’, ‘h’);
    if (false === $pos)

    Тут возможно для новичков не совсем ясно про тип операнда. Дело в том, что нумерация в строках начинается с нуля (как в массивах) и в данном случае $pos = 0.

    Потом если мы сравним вот так if (false == $pos), то условие сработает! Потому что $pos = 0 преобразуется в $pos = false при сравнении не учитывающм тип переменной (==)

    А при (===) тип переменной учитывается и false уже никак не будет равно 0

  12. для лены… попробуйте скачать и подключить библиотеку jQuery с jquery.com, обычно с ней нет проблем при работе с иннерами и валу.. в опере и ие.

    раз

    Вставка

    нда надо было на дату посмотреть… ((


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map