Как найти и заменить элемент в строке примеры str_replace
Содержание:
- Поиск символа в строке — использование strpos() для регистрозависимого поиска
- Сравнение алгоритмов[править]
- Классификация алгоритмов поиска подстроки в строке[править]
- Замена подстроки
- Замена слов в скобках php
- Заменить N-ый символ на любое количество знаков.
- Продвинутая работа со строками
- Поиск определенного сотрудника
- Как заменить слово/слова в Php
- Пример использования strpos для поиска вводимого пользователем термина
- Поиск по буквам
- Разработка формы
- Найти первое повторяющееся слово и выделить его
- В завершение
- Поиск символа в строке — использование регулярных выражений
Поиск символа в строке — использование strpos() для регистрозависимого поиска
Простейшим способом проверить, содержит ли строка определённое слово, является использование PHP функции strpos(). Она возвращает позицию первого вхождения подстроки в строке или FALSE, если соответствия не найдены. Поэтому можно сравнить значение, возвращаемое функцией strpos() с FALSE, чтобы проверить наличие подстроки. Пример:
$the_string = "Я на 5 лет старше тебя."; $the_word = "лет"; $the_character = "Я"; $the_substring = "5 лет"; // Вывод — Слово "лет" есть в данной строке. if (strpos($the_string, $the_word) !== false) { echo 'Слово "'.$the_word.'" есть в данной строке.'; } // Вывод — Символ "Я" есть в данной строке. if (strpos($the_string, $the_character) !== false) { echo ' Символ "'.$the_character.'" есть в данной строке.'; } // Вывод — Подстрока "5 лет" есть в данной строке. if (strpos($the_string, $the_substring) !== false) { echo 'Подстрока "'.$the_substring.'" есть в данной строке.'; }
Обратите внимание, что я использовал оператор строгого неравенства (!==). Если искомое слово встречается в начале строки, функция strpos() вернёт 0
Это будет расценено оператором != как значение FALSE. Пример:
// Вывод — Символа "Я" нет в данной строке. if (strpos($the_string, $the_character) != false) { echo 'Символ "'.$the_character.'" есть в данной строке.'; } else { echo 'Символа "'.$the_character.'" нет в данной строке.'; }
При поиске целого слова (например, “на”) функция также вернёт значение TRUE, если строка содержит такие слова, как “она”, “вена” или “например”.
Также можно использовать > -1 вместо !==. Потому что даже если strpos() вернёт 0 как значение индекса, он всё равно будет больше -1. Но помните, что оператор «больше» (>) работает медленнее оператора строгого неравенства (!==).
Сравнение алгоритмов[править]
- — размер алфавита
- — длина текста
- — длина паттерна
- — размер ответа(кол-во пар)
- — суммарная длина всех паттернов
Название | Среднее | Худшее | Препроцессинг | Дополнительная память | Кол-во поисковых шаблонов | Порядок сравнения | Описание |
---|---|---|---|---|---|---|---|
Наивный алгоритм (Brute Force algorithm) | Single | Прямой | Сравнение — «чёрный ящик». Если достаточно мало по сравнению с , то асимптотика будет близкой к , что позволяет использовать его на практике в случаях, когда паттерн много меньше текста (например, Ctrl+F в браузерах) | ||||
Поиск подстроки в строке с помощью Z-функции | Single | Прямой | |||||
Алгоритм Рабина-Карпа (Karp-Rabin algorithm) | Single / Finite | Прямой | Данный алгоритм использует хэширование, что снижает скорость в среднем. Можно модифицировать для поиска нескольких паттернов | ||||
Алгоритм Кнута-Морриса-Пратта (Knuth-Morris-Pratt algorith) | Single | Прямой | Использует префикс-функцию | ||||
Алгоритм Колусси (Colussi algorithm) | Single | Прямой / Обратный | Оптимизация Алгоритма Кнута-Морриса-Пратта использует как прямой, так и обратный обход | ||||
Алгоритм Ахо-Корасик (Aho–Corasick string matching algorithm) | Finite | Прямой | Строит конечный автомат. Можно хранить таблицу переходов как индексный массив (array), а можно как Красно-черное дерево. В последнем случае уменьшится расход памяти, но ухудшится асимптотика | ||||
Алгоритм Shift-Or | — размер машинного слова | Single | Прямой | Использует тот факт, что в современных процессорах битовые сдвиг и или являются атомарными. Эффективен, если . Иначе деградирует и по памяти, и по сложности | |||
Алгоритм Бойера-Мура (Boyer-Moore algorithm) | Single | Обратный | Считается наиболее быстрым из алгоритмов общего назначения. Использует эвристики. Существует большое количество оптимизаций | ||||
Поиск подстроки в строке с помощью суффиксного массива (Suffix array) | Single | Прямой | Использует Суффиксный массив. Если использовать Largest common prefix (lcp), то можно уменьшить асимптотику до . Суффиксный массив можно строить стандартными способами или алгоритмом Карккайнена-Сандерса. Асимптотика приведена для построения суффиксного массива с помощью алгоритма Карккайнена-Сандерса | ||||
Поиск подстроки в строке с помощью суффиксного дерева (Suffix tree) | Single | Прямой | Позволяет выполнять поиск подстроки в строке за линейное время | ||||
Алгоритм Апостолико-Крочемора ( Apostolico-Crochemore algorithm) | Single | Прямой | В худшем случае выполнит сравнений. |
Классификация алгоритмов поиска подстроки в строке[править]
Сравнение — «чёрный ящик»править
Во всех алгоритмах этого типа сравнение является «чёрным ящиком» для программиста.
Преимущества:
позволяет использовать стандартные функции сравнения участков памяти (man *cmp(3)), которые, зачастую, оптимизированы под конкретное железо.
Недостатки:
не выдается точка, в которой произошло несовпадение.
По порядку сравнения паттерна в текстеправить
Прямойправить
Преимущества:
отсутствие регрессии на «плохих» данных.
Недостатки:
не самая хорошая средняя асимптотическая сложность.
Обратныйправить
Паттерн движется по тексту слева направо, но сравнение подстрок происходит справа налево.
Преимущества:
при несовпадении позволяет перемещать паттерн по строке сразу на несколько символов.
Недостатки:
производительность сильно зависит от данных.
Сравнение в необычном порядкеправить
Специфические алгоритмы, основанные, как правило, на некоторых эмпирических наблюдениях над словарём.
По количеству поисковых шаблоновправить
Сколько поисковых шаблонов может обработать алгоритм за один раз.
- один шаблон (англ. single pattern algorithms)
- конечное количество шаблонов (англ. finite set of patterns)
- бесконечное количество шаблонов (англ. infinite number of patterns) (см. Теория формальных языков)
Виды препроцессинга:
- Префикс-функция
- Z-функция
- Бор
- Суффиксный массив
Алгоритмы, использующие препроцессинг — одни из самых быстрых в этом классе.
Замена подстроки
Пример: заменим bbb на zzz:
$str = 'aaa bbb ccc bbb ddd'; $result = str_replace('bbb', 'zzz', $str); echo $result; // результат: aaa zzz ccc zzz ddd
Мы заменили «bbb» на «zzz» и в $result запишется строка «aaa zzz ccc zzz ddd». У нас было 2 вхождения подстроки bbb и мы заменили их на zzz.
А что если нам нужно также заменить и ccc на zzz? Мы бы конечно могли запустить функцию 2 раза, в первый раз заменив первую подстроку, а второй раз другую, но можно просто указать массив подстрок поиска первым параметром.
Пример: заменим bbb и ccc на zzz:
$str = 'aaa bbb ccc bbb ddd'; $result = str_replace(, 'zzz', $str); echo $result; // результат: aaa zzz zzz zzz ddd
Что если нам нужно заменить bbb на zzz, а ccc на www?
Мы конечно снова можем запустить функцию 2 раза, но оптимальнее с точки зрения производительности будет и вторым параметром передать массив. В первом массиве будут подстроки, которые мы ищем, а во втором те, на которые заменяем.
Пример: заменяем bbb на zzz, а ccc на www:
$str = 'aaa bbb ccc bbb ddd'; $result = str_replace(, , $str); echo $result; // результат: aaa zzz www zzz ddd
Результат у нас правильный, но читабельность конечно страдает. А представьте если бы мы указывали сразу 50 таких строк для замены? И потом когда мы добавляем или заменяем строку, ее приходилось бы искать в 2 местах.
Более читабельным был бы код:
$str = 'aaa bbb ccc bbb ddd'; $replaces = ; $result = str_replace(array_keys($replaces), array_values($replaces), $str); echo $result; // результат: aaa zzz www zzz ddd
Тут нам помогли функции array_keys и array_values которые вернули все ключи и все значения соответственно.
Кстати для подобной замены вам не обязательно использовать функцию str_replace, а можно воспользоваться strtr, и тогда наш код выглядел бы еще более просто:
$str = 'aaa bbb ccc bbb ddd'; $result = strtr($str, ); echo $result; // результат: aaa zzz www zzz ddd
У функции str_replace также есть четвертый параметр $count, в котором мы ничего не передаем, а наоборот получаем количество вхождений.
Таким образом если дополнить наш пример:
$str = 'aaa bbb ccc bbb ddd'; $result = str_replace('bbb', 'zzz', $str, $count); echo $result; // результат: aaa zzz ccc zzz ddd echo 'Вхождений: ' . $count; // Вхождений: 2
Обязательно прочитайте подробную документацию: https://www.php.net/manual/ru/function.str-replace.php
Замена слов в скобках php
Замена слов в скобках phpВ чем фишка!?Как это работает
Если напишу вот так : php в коде… либо css , то никаких квадратных скобок вы не увидите… смотри скрин ниже:
Замена слов в скобках php
После обработки php скриптом, это будут обычные ссылки, слова в скобках были заменены на :
В первом случае с php:
<a href=»https://dwweb.ru/?tema=php» target=»_blank»>php</a>
Во втором случае с css:
<a href=»https://dwweb.ru/?tema=css» target=»_blank»>css</a>
Таких слов огромное количество и естественно, что запомнить их все невозможно, поэтому у меня есть кнопка, которая выводит все эти слова в других кнопках, и достаточно кнопку нажать — она вставляется с помощью скрипта js.
Эту картинку, скриншот, можно увеличить в отдельном окне нажмите по нему!Замена слов в скобках phpздесь мелькает эта панельПродолжение:
Поскольку довольно редкий поисковый запрос… напишите — вам интересен этот скрипт?!
Заменить N-ый символ на любое количество знаков.
Если вы не ответили на вопрос, почему нельзя заменить один символ на несколько символов, то ответ простой! Символ можно заменить только на 1 символ! Иначе структура переменной поломается… и замену не увидите, и все, что после этого символа, вместе с символом…
А если нужно N-ый символ строки заменить на слово!?
На предложение и т.д… да на что угодно…
Легко!
Разобьем(explode) строку в массив, по тому символу, который хотим заменить :
$TEXT_EX = explode($NEW_TEXT,$NEW_TEXT);
Соединим(implode) массив в строку, в первое значение помещаем все то, на что хотим заменить. Либо туда переменную.
$TEXT_EX = implode(‘ <red>Здесь любой текст, любой длины</red> ‘, $TEXT_EX);
Смотрим результат…
Hello Здесь любой текст, любой длины world!
Пользуйтесь на здоровье! Не забудьте сказать
Название скрипта :Php поиск и замена в строке
Ссылка на скачивание : Все скрипты на
Теги :php замена в строке
php замена символов в строке
php замена подстроки в строке
php поиск и замена в строке
php замена переноса строки
замена строки в файле php
php замена части строки
php замена текста в строке
замена символов php
php замена символов в строке
найти в тексте имя и заменить php
php str replace примеры
str_replace php
Продвинутая работа со строками
Если вы часто работаете со строками, то возможно вам пригодятся более высокоуровневые методы для их обработки.
Взгляните как будут выглядеть поиск и замена строк с помощью symfony/string:
// checks if the string starts/ends with the given string u('https://symfony.com')->startsWith('https'); // true u('report-1234.pdf')->endsWith('.pdf'); // true // checks if the string contents are exactly the same as the given contents u('foo')->equalsTo('foo'); // true // checks if the string content match the given regular expression u('avatar-73647.png')->match('/avatar-(\d+)\.png/'); // result = // checks if the string contains any of the other given strings u('aeiou')->containsAny('a'); // true u('aeiou')->containsAny(); // false u('aeiou')->containsAny(); // true // finds the position of the first occurrence of the given string // (the second argument is the position where the search starts and negative // values have the same meaning as in PHP functions) u('abcdeabcde')->indexOf('c'); // 2 u('abcdeabcde')->indexOf('c', 2); // 2 u('abcdeabcde')->indexOf('c', -4); // 7 u('abcdeabcde')->indexOf('eab'); // 4 u('abcdeabcde')->indexOf('k'); // null // finds the position of the last occurrence of the given string // (the second argument is the position where the search starts and negative // values have the same meaning as in PHP functions) u('abcdeabcde')->indexOfLast('c'); // 7 u('abcdeabcde')->indexOfLast('c', 2); // 7 u('abcdeabcde')->indexOfLast('c', -4); // 2 u('abcdeabcde')->indexOfLast('eab'); // 4 u('abcdeabcde')->indexOfLast('k'); // null // replaces all occurrences of the given string u('http://symfony.com')->replace('http://', 'https://'); // 'https://symfony.com' // replaces all occurrences of the given regular expression u('(+1) 206-555-0100')->replaceMatches('/++/', ''); // '12065550100' // you can pass a callable as the second argument to perform advanced replacements u('123')->replaceMatches('/\d/', function ($match) { return '.']'; }); // result = ''
Помогла ли Вам эта статья?
Да
Нет
Поиск определенного сотрудника
Чтобы отобразить информацию об остальном персонале, которая передается через уникальное id внутри нашей ссылки, нужно добавить следующий код прямо после закрывающей фигурной скобки в скрипте letter, как показано ниже:
}//Окончание скрипта if(isset($_GET)){ $contactid=$_GET; //Подключение к базе данных $db=mysql_connect ("servername", "username", "password") or die ('Я не могу подключиться к базе данных, так как: ' . mysql_error()); //-select the database to use $mydb=mysql_select_db("yourDatabase"); //- Запрос к таблице базы данных $sql="SELECT * FROM Contacts WHERE ID=" . $contactid; //- Запустить запрос к функции mysql_query() $result=mysql_query($sql); //- Запуск цикла и сортировка результатов while($row=mysql_fetch_array($result)){ $FirstName =$row; $LastName=$row; $PhoneNumber=$row; $Email=$row; //- Вывести результат в массиве echo "<ul>n"; echo "<li>" . $FirstName . " " . $LastName . "</li>n"; echo "<li>" . $PhoneNumber . "</li>n"; echo "<li>" . "<a href=mailto:" . $Email . ">" . $Email . "</a></li>n"; echo "</ul>"; } }
Здесь мы изменили четыре фрагмента кода:
- Мы используем функцию isset(), и с ее помощью проверяем значение ID в массиве $_GET;
- Создаем переменную $contactid и инициализируем ее массивом $_GET;
- В таблице выделяем все, что отмечено звездочкой *. Звездочка – это сокращенное обозначение в SQL, которое означает «дайте мне все столбцы и строки из таблицы». Чтобы определить, какую информацию выводить, мы упоминаем переменную contactid в конце SQL-выражения;
- Выводим дополнительную информацию о каждом представителе персонала.
Сохраните файл search_byid.php и проверьте результат.
Обратите внимание, что наш функционал работает так, как и положено. При вводе имени или фамилии в поле, или при выборе буквы в качестве гиперссылки, отображаются только имена представителей персонала
Если навести курсор на ссылку, то в строке статуса можно увидеть уникальный ID. Если кликнуть по конкретному человеку, то адресная строка изменится, и отобразится дополнительная информация об этом сотруднике.
Как заменить слово/слова в Php
Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!(если вы не поняли, то он кричит — «это гениально!!!»)
И тут внимание!Интересно!?$search$search_1 = array(«слово»,»слова»);
Далее нам потребуется массив, на который будем менять… слова будут те же. но вот мы обернем их в цвет…
$replace_1 = array(«<span style=\»color: red\»>слово</span >»,»<span style=\»color: #1b00ff;\»>слова</span>»);
Ну и собственно текст, где и будем менять массив на массив:
$subject_1 = «Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!, а все слова, которые будут иметь в совсем составе слово «слова» , будут покрашены в синий «;
И выведем прямо здесь нашу замену слова:
echo str_replace($search_1, $replace_1, $subject_1 );
Пример использования strpos для поиска вводимого пользователем термина
Этот метод может оказаться полезным в определенных сценариях. Например, когда в форму не разрешается вводить определенные слова.
Кроме этого можно проверить, содержится ли слово, заданное пользователем на поиск, в исходной строке. Исходя из этого, можно вывести определенные результаты в виде ответа.
В этой демо-версии, пользователь может ввести термин в текстовое поле. После нажатия кнопки запускается функция strpos, чтобы проверить, содержит ли исходная строка подстроку. На экран будет выводиться соответствующее сообщение:
Для демо-версии я использовал следующую исходную строку:
$source_string = 'In this demo, I am using a user entered search term to check if string contains search term or not by using strpos!';
Попробуйте ввести разные буквы или слова для поиска, чтобы проверить вернет ли функция значение false. Кроме этого попробуйте ввести термины заглавными или маленькими буквами, чтобы увидеть разницу.
Для этого был использован следующий пример PHP strpos utf 8:
<?php $search_term=$_POST; $source_string = 'In this demo, I am using a user entered search term to check if string contains search term or not by using strpos!'; // = 'strpos'; $posistion = strpos($source_string, $search_term); if( $search_term ){ echo "<div class='result'>"; if ($posistion === false) { echo "The source string does not contain the: '$search_term'!"; } else { echo "The string contains the search term: '$search_term'! </BR>"; echo " The given substring found at: $posistion"; } echo "</div>"; } ?>
Также можете посмотреть разметку strpos PHP примера:
<!doctype html> <html> <head> <style> .result { background: #5BB75B; height: auto; width:220px; border-radius: 15px; padding:20px; font-size:20px; color:#000; } .searchterm{ background: #6A0432; width:220px; border-radius: 15px; padding:20px; font-size:18px; color:#fff; } </style> <div class="searchterm"> <form method="post" action=""> <label>Enter a string:</label><input type="text" name="searchterm"> <input type="submit"/> </form> </div> </body> </html>
Полную версию можно увидеть в исходном коде страницы демо-версии.
Кроме этого вы можете использовать в качестве источника базу данных для создания системы поиска на своем сайте.
Поиск по буквам
Для реализации поиска по буквам потребуется лишь несколько дополнительных строк кода. Добавим этот удобный функционал для посетителей. Таким образом, они смогут находить представителей персонала по буквам, которые содержатся в имени или фамилии.
Добавьте следующую строку кода после закрывающего тега form:
</form> <p><a href="?by=A">A</a> | <a href="?by=B">B</a> | <a href="?by=K">K</a></p> <?php
Мы привязываем тег <a> к строке запроса с by с помощью анкора, и устанавливаем его равным определенной букве. Чтобы реализовать функционал поиска по буквам, нам нужно добавить следующий код прямо после закрывающей фигурной скобки в исходном скрипте, как показано ниже:
}//Окончание скрипта поисковой формы if(isset($_GET)){ $letter=$_GET; //Подключение к базе данных $db=mysql_connect ("servername", "username", "password") or die ('Я не могу подключиться к базе данных, так как: ' . mysql_error()); //-Выберете базу данных $mydb=mysql_select_db("yourDatabase"); //-Запрос к таблице базы $sql="SELECT ID, FirstName, LastName FROM Contacts WHERE FirstName LIKE '%" . $letter . "%' OR LastName LIKE '%" . $letter ."%'"; //-Запустить запрос к функции MySQL Query $result=mysql_query($sql); //-Результаты подсчета $numrows=mysql_num_rows($result); echo "<p>" .$numrows . " results found for " . $letter . "</p>"; //-Запуск цикла и сортировка результатов while($row=mysql_fetch_array($result)){ $FirstName =$row; $LastName=$row; $ID=$row; //-Вывести результат в массиве echo "<ul>n"; echo "<li>" . "<a href="search.php?id=$ID">" .$FirstName . " " . $LastName . "</a></li>n"; echo "</ul>"; } }
Здесь мы изменили четыре фрагмента кода скрипта поиска по сайту:
- Мы используем функцию isset(), и вносим в нее массив $_GET, а затем проверяем значение by;
- Создаем переменную $letter и инициализируем ее значение массивом $_GET;
- Добавляем переменную letter в SQL-запрос;
- Указываем переменную letter внутри выражения, в котором получаем подсчитанное количество строк.
Сохраните файл search_byletter.php и проверьте результат.
Разработка формы
Чтобы создать форму поиска по сайту через , откройте любой подходящий текстовый редактор. Я рекомендую воспользоваться бесплатным PSPad. Вы можете использовать любой текстовый редактор, где предусмотрена подсветка синтаксиса. Это в значительной степени облегчит процесс написания и отладки PHP-кода. Создавая страницу для формы поиска, не забудьте сохранить ее в формате .php, иначе PHP-код не будет обрабатываться должным образом. Как только сохраните документ, скопируйте в него следующую разметку:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Поиск контактов:</title> </head> <p><body> <h3>Детальный поиск контактов</h3> <p>Вы можете искать по имени или фамилии</p> <form method="post" action="search.php?go" id="searchform"> <input type="text" name="name"> <input type="submit" name="submit" value="Search"> </form> </body> </html> </p>
Если вы знакомы с языком HTML, то тут вам все должно быть понятно как минимум до открывающего тега form. Внутри этого тега находится важнейший элемент всего кода – атрибут action. В качестве действия нашей формы мы указали название нашего файла, а затем применили к нему строку запроса “go”.
Найти первое повторяющееся слово и выделить его
Условие задачи:
Требуется найти в тексте первое повторяющиеся слово и подчеркнуть его(выделить).
Предположим, что вам нужно найти первое повторяющееся слово в тексте и его же нужно подчеркнуть!
Создадим сразу несколько переменных с разным текстом:
$text = ‘This is do a test — «do do do»‘;
$text_1 = ‘Это тестовый текст в котором есть повторяющееся слово текст’;
$text_2 = ‘Это слово и тестовый текст в котором есть повторяющееся слово и слово текст’;
$text_3 = ‘Это слово и тестовый текст в котором есть повторяющееся слово и слово это текст ‘;
Разбиваем текст по пробелу с помощью explode
$ex = explode(‘ ‘, $thetext);
Далее нам потребуется два цикла. Внутри второго чикла пишем условие, если слово в массиве будет повторяться, то создаем счетчик, по имени слова:
$$ex ++;
Далее следующее условие, если счетчик будет равен 2, то прерываем цикл :
break;
Соберем циклы:
$ex = explode(‘ ‘, $thetext);
for ($i = 0; $i < count($ex); $i++)
{
for ($j = 0; $j < count($ex); $j++)
{
if ( my_strtolower($ex) == my_strtolower( $ex) )
{
$$ex ++;
if($$ex ==2) {$the_word = my_strtolower( $ex ); break;}
}
}
if($the_word){break;}
}
Создаем третий цикл, в котором, как только встретится слово найденное в предыдущих двух циклах, то сразу его выделим цветом слово в массиве с помощью тега
for ($d = 0; $d
{
if( my_strtolower( $ex ) == $the_word) { $ex = ‘<mark>’.$ex.'</mark>’; break; }
}
Далее Измененный массив преобразуем в строку:
implode(‘ ‘, $ex);
Запакуем это все в функцию :
Добавлено… в условии and $ex — (2 — 1 = 1) количество символов, отсекать одинарные буквы. Если требуется отсечь предлоги с двумя и менее буквами — $ex
function find_first($thetext)
{
$ex = explode(‘ ‘, $thetext);
for ($i = 0; $i < count($ex); $i++)
{
for ($j = 0; $j < count($ex); $j++)
{
if ( my_strtolower($ex) == my_strtolower( $ex) and $ex )
{
$$ex ++;
if($$ex ==2) {$the_word = my_strtolower( $ex ); break;}
}
}
if($the_word){break;}
}
for ($d = 0; $d < count($ex); $d++)
{
if( my_strtolower( $ex ) == $the_word) { $ex = ‘<mark>’.$ex.'</mark>’; break; }
}
return implode(‘ ‘, $ex);
}
Выведем результаты, нахождения первого повторяющегося слова в тексте :
echo find_first($text);
echo ‘<br>’;
echo find_first($text_1);
echo ‘<br>’;
echo find_first($text_2);
echo ‘<br>’;
echo find_first($text_3);
В завершение
В сегодняшней статье мы рассмотрели, как сделать поиск по сайту, а также:
- Создавать базы данных и соответствующие таблицы;
- Использовать инструменты для управления базами данных, создавать столбцы и вводить данные;
- Разрабатывать формы поиска на основе PHP, которая умеет осуществлять проверку вводимых данных, наличия переменных в запросе, а также соединяться с базой данных и выводить результаты из таблицы;
- Как защитить приложение и базу данных от SQL-инъекций.
Используя знания, полученные из этой статьи, вы сможете без труда модифицировать чужой код, а также при необходимости расширять функционал формы поиска.
Поиск символа в строке — использование регулярных выражений
Также для поиска можно использовать регулярные выражения. Они лучше подходят для случаев, когда вы ищете в строке более сложные конструкции.
Но помните, что функция strpos() работает в три раза быстрее, чем регулярные выражения. Следующий пример демонстрирует, как с их помощью найти слово, символ в строке:
$the_string = "Я на 5 лет старше тебя."; $the_word = "лет"; $the_character = "Я"; $the_substring = "5 лет"; // Вывод — Слово "лет" есть в данной строке. if (preg_match('/лет/', $the_string)) { echo 'Слово "'.$the_word.'" есть в данной строке.'; } // Вывод — Символ "Я" есть в данной строке. if (preg_match('/Я/', $the_string)) { echo 'Символ "'.$the_character.'" есть в данной строке.'; } // Вывод — Подстрока "5 лет" есть в данной строке. if (preg_match('/5 лет/', $the_string)) { echo 'Подстрока "'.$the_substring.'" есть в данной строке.'; }
Использование функции preg_match() имеет смысл только при сложном поиске. Например, для проверки того, содержит ли строка слова с десятью и более символами и т.п. Пример:
$the_string = 'Фотосинтез и рискованный – длинные слова.'; // Вывод — Данная строка содержит слова из 10 и более символов. if (preg_match('/w{10,}/i', $the_string)) { echo 'Данная строка содержит слова из 10 и более символов.'; }
Чтобы сделать поиск регистронезависимым, добавьте флаг i в конец шаблона. Пример реализации:
$the_string = "Ваня любит и яблоки, и апельсины."; $the_word = "ваня"; $the_character = "Я"; $the_substring = "ЛЮбИт И"; // Вывод — Слово "ваня" есть в данной строке. if (preg_match('/ваня/i', $the_string)) { echo 'Слово "'.$the_word.'" есть в данной строке.'; } // Вывод — Символ "Я" есть в данной строке. if (preg_match('/Я/i', $the_string)) { echo 'Символ "'.$the_character.'" есть в данной строке.'; } // Вывод — Подстрока "ЛЮбИт И" есть в данной строке. if (preg_match('/ЛЮбИт И/i', $the_string)) { echo 'Подстрока "'.$the_substring.'" есть в данной строке.'; }