Знайти входження рядка php. Пошук підрядки у рядку за допомогою PHP

PHP пропонує використовувати різні варіанти пошуку рядків в інших рядках. Існують звичайні функції. Є можливість використання регулярних виразів. Розробник може розробити власний варіант пошуку інформації за дотримання правил синтаксису.

Пошук рядків не обмежується фактом підтвердження наявності потрібного символу чи рядка у потрібному місці. Рядком може виступати об'єкт – це більш ємне інформаційне поняття, ніж просто рядок. Пошук особливо ефективний, коли момент виявлення супроводжується негайним прийняттям рішення, а чи не вимагає додаткової обробки.

Основні функціональні можливості пошуку

Пошук – функція strpos(). Її результат - або булеве значення, або позиція входження шуканого (другий параметр) у рядку (перший параметр) з позиції (третій параметр). Якщо останній параметр не встановлено, пошук виконується з нульової позиції рядка.

У цьому прикладі PHP-пошук у рядку показаний на прикладі одиночного символу. Замість символу можна використовувати рядок. PHP не обмежує програміста в розмірах рядків, але розумні межі мають важливе значення.

Шукати рядки в рядках можна з урахуванням регістру, з першого чи останнього входження та використовувати регулярні вирази. Як і в інших випадках, істотне значення має кодування сторінки, на якій знаходиться скрипт.

У деяких випадках доцільно використовувати варіант iconv_strpos(), а чи не просто strpos(). У переважній більшості випадків пошук підрядки у рядку PHP забезпечить ідеально точно: достатньо тримати кодування сторінки та рядки в одному кодуванні.

Особливості стандартного підходу

Якщо пошук підрядки у рядку PHP не має результату: шуканого немає, результат буде логічним значенням. Однак якщо шуканий підряд починається з нульової позиції, то це слід виділити особливо в операціях порівняння та аналізу результату. Коли результат дорівнює 0 – це ненабагато стоять далі від результату false.

На відміну від JavaScript, щодо рядків PHP більш консервативний, і для нього досі рядки - це рядки. Робота з ними - це малі функції: від простих рівня strpos до складних, що використовують регулярні вирази.

Шукати потрібно, щоб:

  • ухвалити рішення про направлення алгоритму;
  • замінити шукане інше;
  • перевірити подію;
  • збільшити лічильник статистики та ін.

Це звична логіка алгоритму, JavaScript пішов далі і визнав рядки об'єктами. Але одного зізнання практично мало. Якщо абстрагуватися від поняття "рядок" і розуміти під ним реальний об'єкт, питання "пошук рядка в рядку" PHP дозволить сформулювати в контексті реального методу, наприклад, яблуко може бути стиглим, не тільки коли воно червоне.

Класичний пошук слова "червоне" в описі яблука не є гарантією достовірної відповіді про стиглість фрукта. Якщо яблуко представлено не рядком, а об'єктом, пошук рядка в рядку PHP виконає не як strpos, а як метод реального об'єкта. При цьому немає гарантії, що в тілі методу буде використовуватися саме функція strpos.

Стандартні функції у нестандартних рішеннях

Характерна риса звичної обробки інформації (людиною): позиція, де що знаходиться, має значення, коли вона є метою чи рішенням. У решті випадків не важливо, де що є, важливо, що воно позначено і є підставою для подальших дій.

Опосередковано пошук виконує у функціях trim, str_replace та інших. Цікавий варіант пошуку доступний при спільному застосуванні explode/implode та маніпулюванні масивами.

Якщо використовувати всю функціональність PHP, пошук у рядку легко набуває семантики, виходить за рамки звичного синтаксису і стає причиною для набуття реального сенсу. Маніпулювання змістом в людини звичніше, для алгоритму безпечніше, а трансформація рядків в об'єкти - як перехід від машинних кодів у світ сучасних мов програмування.

Рядки - дуже важливий тип даних, з яким доводиться постійно працювати при вирішенні завдань Інтернет-розробки. У цій статті описано 10 дуже корисних прийомів, які зроблять життя PHP розробнику легшим.

Автоматичне видалення html тегів з рядка

При використанні форм, що заповнюються користувачем, іноді потрібно видалити всі зайві теги. Це завдання легко вирішується за допомогою функції strip_tags():

$text = strip_tags($input, "");

Отримуємо текст між $start та $end

Така функція має бути в арсеналі розробника: вона отримує оригінальний рядок, початок та кінець, а повертає текст, який міститься між $start та $end.

Function GetBetween($content,$start,$end)( $r = explode($start, $content); if (isset($r))( $r = explode($end, $r); return $r; ) return "";

Трансформація URL у гіперпосилання

Якщо ви помістите URL-адресу у формі коментаря в блозі WordPress, вона автоматично трансформується на гіперпосилання. Якщо ви хочете реалізувати таку ж функціональність на своєму сайті або в веб-додатку, можна використовувати наступний код:

$url = "Jean-Baptiste Jung (http://www.webdevcat.com)"; $url = preg_replace("#http://(+)#", " ", $url);

Розділяємо текст у 140 символів для Twitter

Можливо ви знаєте, що Twitterприймає повідомлення довжиною трохи більше 140 символів. Якщо у вас є плани організувати взаємодію своєї програми з популярним соціальним сайтом повідомлень, то функція, яка обрізає повідомлення до 140 символів, напевно, прийде вам до двору.

Function split_to_chunks($to,$text)( $total_length = (140 - strlen($to)); $text_arr = explode(" ",$text); $i=0; $message=""; foreach ($text_arr as $word)( if (strlen($message[$i] . $word . " ")<= $total_length){ if ($text_arr == $word){ $message[$i] .= $word; } else { $message[$i] .= $word . " "; } } else { $i++; if ($text_arr == $word){ $message[$i] = $word; } else { $message[$i] = $word . " "; } } } return $message; }

Видаляємо URL з рядка

Багато людей залишають у коментарях блогу URL, щоб отримати трафік або організувати зворотний зв'язок. Такі посилання забруднюють блог і можуть стати причиною розладів власника у разі їхньої великої кількості. Тож наступна функція буде дуже корисною!

$string = preg_replace("/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*/ i", "", $string);

Конвертуємо рядок у склад

Потрібно генерувати склад (для постійного посилання), який буде сумісний із завданнями SEO? Наступна функція приймає рядок як параметр і повертає сумісний із завданнями SEO склад. Просто та ефективно!

Function slug($str)( $str = strtolower(trim($str)); $str = preg_replace("/[^a-z0-9-]/", "-", $str); $str = preg_replace ("/-+/", "-", $str);

Парсинг файлу CSV

CSV (Coma separated values ​​– значення, розділені комою) файли – простий спосіб для зберігання та передачі даних, а парсинг таких файлів у PHP виконується надзвичайно просто. Не вірите? Наступний код демонструє обробку CSV файлу:

$fh = fopen("contacts.csv", "r"); while($line = fgetcsv($fh, 1000, ",")) ( echo "Contact: ($line)"; )

Пошук рядка в іншому рядку

Якщо рядок міститься в іншому рядку і вам потрібно знайти його, то завдання вирішується просто:

Function contains($str, $content, $ignorecase=true)( if ($ignorecase)( $str = strtolower($str); $content = strtolower($content); ) return strpos($content,$str) ? true: false;

Перевіряємо, що рядок починається з певного шаблону

Деякі мови програмування, наприклад Java, мають метод/функцію startWith, яка дозволяє перевіряти, чи починається рядок із певного шаблону. На жаль, PHP не має такої простої вбудованої функції.
Тим не менш, ми можемо зробити її для себе, причому дуже просто::

Function String_Begins_With($needle, $haystack) ( return (substr($haystack, 0, strlen($needle))==$needle); )

Виділяємо email з рядка

Коли дивувалися, як спамери отримують ваші email адреси? Все просто. Вони беруть веб-сторінку (наприклад, з форуму) і проводять парсинг html коду для виділення emails адрес. Нижче наведений код отримує рядок як параметр і друкує всі email, що містяться в ньому. Будь ласка, не використовуйте цей код для спаму!

Function extract_emails($str)( // Регулярний вираз, який витягує всі email з рядка: $regexp = "/()+\@(()+\.)+((2,4))+/i"; preg_match_all ($regexp, $str, $m); return isset($m) ? array(); [email protected]Перевіряємо інші формати: [email protected]; foobar Ще перевірка: [email protected] test6example.org [email protected] [email protected] test9@!foo!.org foobar"; print_r(extract_emails($test_string));

strripos - Відображати позицію останньої аварії з випадку-інсенсітивного substring in a string

Description

Відображається numerical position of last occurrence of needle in the haystack string.

Unlike the strrpos(), strripos() is case-insensitive.

Parameters

The string до search in.

Якщо ліжко не є string, він спрямований на integer і застосовується як звичайне значення character. Цей behavior is deprecated як PHP 7.3.0, і йдеться про це є високорозгорнуті. Depending on the intended behavior, needle should either be explicitly cast to string, або explicit call to chr() should be performed.

Якщо cero або позитивно, дослідження виконано лівим до правого skipping перші offset byty haystack .

Якщо negative, search is performed right to left skipping the last offset bytes of haystack and searching for first occurrence of needle .

Це ефективно дивитися на останній випадок греблі до останніх offset bytes.

Return Values

Поверніть позицію, де сідла існують відносно до початку статевої мети (залежно від пошуку direction or offset).

Note: String positions start at 0, and not 1.

Returns FALSE if the needle was not found.

Warning

Ця функція може бути відновлена ​​Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Подивіться розділ на Booleans для більше інформації. Використовуйте === оператор для випробування зворотного значення цієї функції.

Examples

Example #1 A simple strripos() example

$haystack = "ababcd";
$needle = "aB";

$pos = strripos ($haystack, $needle);

if ($pos === false ) (
echo "Sorry, we did not find ($needle) in ($haystack)" ;
) else (
echo "Congratulations!\n" ;
echo "Виставляємо останні ($needle) в ($haystack) на позиції ($pos)" ;
}
?>

1.1K

Функція PHP strpos використовується для пошуку підрядка в заданому рядку. Вона повертає числове значення першого входження заданого на пошук підрядка.

Синтаксис для використання strpos

PHP функція strpos використовується так:

$position = strpos($given_string, $search_string);

Примітка: Під час пошуку за допомогою функції strpos регістр має значення. Так що пошук за ключовими словами "Test" та "test" дасть різні результати.

Відлік позиції починається з 0 , а чи не 1 .

На прикладі демо-версій я продемонструю використання цієї функції для пошуку заданого підрядка і значення, що вводиться користувачем.

Простий приклад використання функції strpos

Перегляньте наступний приклад, в якому я використовував задані для пошуку значення, щоб продемонструвати роботу функції strpos PHP :


Переглянути онлайн демо-версію та код

Код PHP:

"; echo " The given substr found at: $posistion"; ) ?>

strpos PHP приклад:

string contains the search term: 'strpos'! Given substring found at: 10

Приклад використання strpos для пошуку терміну, що вводиться користувачем.

Цей метод може бути корисним у певних сценаріях. Наприклад, коли у форму не дозволяється вводити певні слова.

Крім цього, можна перевірити, чи міститься слово, задане користувачем на пошук, у вихідному рядку. Виходячи з цього, можна вивести певні результати як відповіді.

У цій демо-версії користувач може ввести термін у текстове поле. Після натискання кнопки запускається функція strpos, щоб перевірити, чи містить вихідний рядок підрядок. На екран буде виводитись відповідне повідомлення:


Для демо-версії я використав наступний вихідний рядок:

$source_string = "У цьому Demo, ми використовуємо користувача, що встановлює пошуковий термін до перевірки, якщо string міститься в пошукових термінах або не використовує strpos!";

Спробуйте ввести різні літери або слова для пошуку, щоб перевірити, чи функція поверне значення false . Крім цього, спробуйте ввести терміни великими або маленькими літерами, щоб побачити різницю.

Для цього був використаний наступний приклад PHP strpos utf 8 :

"; if ($posistion === false) ( echo "Це джерело джерела не містить: "$search_term"!"; ) else ( echo "The string contains the search term: "$search_term"!
"; echo " The given substring found at: $posistion"; ) echo "

"; } ?>

Також можете подивитися розмітку strpos PHP прикладу:



Повну версію можна побачити у вихідному коді сторінки демо-версії.

Крім цього, ви можете використовувати як джерело базу даних для створення системи пошуку на своєму сайті.

Пошук без урахування регістру за допомогою функції stripos

Як згадувалося, функція PHP strpos чутлива до регістру. Для пошуку рядків незалежно від регістру використовуйте функцію PHP stripos.

Синтаксис майже такий самий, як для strpos :

$position = stripos($given_string, $search_string);

Тепер я покажу, як працює stripos.

Приклад використання функції stripos

У цій демо-версії джерелом для пошуку є наступний рядок:

$source_string = "Тим є stripos Tutorial which is used to search strings. It tells whether a given string contains a search string or not!";

Потрібен термін: $search_term = 'tutorial';

Сайти можна розділити на статичні та динамічні. Після освоєння HTML і CSS, які дозволяють зробити гарну візитку в інтернеті, багато хто замислюється, як створити динамічний сайт на PHP. При цьому верстальник повинен враховувати, що тепер він починає вивчати веб-програмування: принципи роботи з сайтом відрізнятимуться. Одна з перших проблем, з якою стикається початківець у PHP - робота з рядками, їх читання та обробка.

Варто зазначити, що в PHP мають на увазі велику кількість методів, тому починати їх вивчення варто з найпростіших маніпуляцій, таких як виведення рядка, пошук, отримання або заміна підрядка, зміна регістру та повернення довжини рядка. Багато функцій погано працюють з кириличними символами. Тому всі приклади написані англійською для наочності. Для кирилиць використовуються ті ж функції, але з префіксом mb_ (наприклад, mb_strpos()). Перш ніж використовувати аналоги, в php.ini необхідно розкоментувати рядок; extension = php_mbstring.dll, просто прибравши крапку з комою.

Створення та виведення рядка

Ми розберемо виведення рядка на екран за допомогою відомої мовної конструкції echo. Програміст може вивести рядок відразу:

echo "Це Новий Рядок"

або спочатку створити змінну, а потім вивести її на екран:

$str = "Це Новий Рядок";

Якщо потрібно вивести кілька рядків в одному, то вдаються до їхньої конкатенації:

echo "Це". "Нова". "Рядок";

$str1 = "Це";

$str2 = "Нова";

$str3 = "Рядок";

echo $str1 . $str2. $str3;

В останньому випадку на екран буде виведено ЦеНовийРядок. Пробіл можна додати відразу при виклику echo:

echo $str1 . " ". $str2. " ". $str3;

В цьому випадку на екран виведеться: "Це Новий Рядок". Конкатенація можлива не тільки під час виведення, а й під час створення рядка:

$str1 = "Це";

$str2 = "Нова";

$str3 = "Рядок";

$string = $str1 . " ". $str2. " ". $str3;

echo $string;

Echo виводить як так і кирилиці. Якщо одна зі змінних містила число, то при конкатенації це число буде перетворено на відповідний рядок:

$ sum = $ i + $ i; //тепер $sum містить число 4

echo $i. "+". $i . "=". $ sum;

На екран буде виведено: "2+2=4".

Службові символи

Припустимо, рядок визначено за допомогою ($string = "Ось так"). Тоді можна спокійно використовувати керуючі послідовності:

  • \n здійснює переклад рядка;
  • вертає каретку;
  • екранує подвійні лапки:
    • echo "Рядок з "подвійними" лапками"; //Рядок з "подвійними" лапками
  • \$ екранує долар;
  • екранує зворотну косу межу.

Послідовностей набагато більше, їх можна знайти в офіційній документації PHP.

Як знайти позицію першого входження підрядка

Припустимо, у нас є простий рядок:

Також у нас є два рядки з іменами:

$name = "Yemelyan";

$anotherName = "Katherin";

Нам необхідно дізнатися, чи перший рядок містить ці два імені. Для цього використовується функція strpos($str, $search). Вона повертає позицію шуканого підрядка $search, якщо цей рядок міститься у вихідному $str. В іншому випадку функція повертає булеве значення false. Наприклад, strpos($string, $anotherName) поверне false, а strpos($string, $name) ціле число. Код буде таким (напишемо варіант, коли позиція виводиться на екран):

$string = "My name is Yemelyan and I am 27 year old";

$name = "Yemelyan";

$anotherName = "Katherin";

echo strpos($string, $anotherName); //виведе false

echo strpos($string, $name); //виведе позицію першого входження підрядка

Врахуйте, що нумерація рядка починається з нуля, тобто в нашому випадку останній рядок виведе число 11 (пробіли також рахуються).

Пошук позиції останнього входження підрядки та підводні камені

Якщо функція strpos() повертає позицію першого входження, то обернена їй функція strrpos() шукає останнє входження підрядка.

Тут є деякі підводні камені, пов'язані з початком нумерації. Це варто враховувати: у PHP робота з рядками може бути ускладнена обмеженнями порівняння. Так, краще використовувати операцію порівняння з запереченням: strpos($str, $search)!=false. У будь-якій версії PHP приклади з подібною еквівалентністю можуть працювати неправильно, адже нумерація рядків починається з нуля, а в логічній інтерпретації 0 є false. Це поширюється на функцію strrpos().

Як знайти число входжень підрядка

Часто потрібно знайти не позицію першого або останнього входження підрядка в рядок, а їх загальне число. Для цього використовується функція substr_count(), яка обробляє щонайменше дві змінні: substr_count($str, $search). Повертає ціле число. Якщо необхідно зменшити область пошуку по рядку, то функцію передаються ще дві змінні: початок і кінець рядка відповідно. Тобто функція у разі викликається так: substr_count($str, $search, $start, $end). Функція шукатиме підстроку $search на проміжку від $start до $end вихідного рядка $str. Якщо рядок не знайдено, то функція поверне нуль.

Як змінити регістр рядка у PHP: приклади

Зміна регістру часто використовується для порівняння рядків і Припустимо, користувач повинен ввести ім'я верховного бога У програмі є варіант "Один", з яким і порівнюватиметься відповідь користувача. Якщо введений текст не співпадатиме з наявним (наприклад, користувач напише "один" або "ОДИН"), то програма поверне значення false замість true. Щоб уникнути цього, застосовується функція зміни регістру. Це часто використовується, якщо сайт на PHP має теги: замість сотні варіантів слова "особисте" ("Особисте", "особисте", "Особисте" тощо) є лише один тег у нижньому регістрі.

Функція strtolower() змінює регістр на нижній. Допустимо, є рядок $catName = "Fluffy". Функція strtolower($catName) поверне рядок "fluffy". Змінити регістр на верхній можна за допомогою strtoupper().

Як знайти довжину рядка в PHP: робота з функціями

Часто потрібно знайти довжину рядка. Наприклад, у PHP робота з рядками такого роду може знадобитися у створенні циклу. Для пошуку рядка використовується функція strlen(), яка повертає число – кількість символів. Не можна забувати, що останній символ матиме номер strlen($str)-1, оскільки нумерація починається з нуля.

Отримання та заміна підрядки в PHP: робота з рядками

Отримання підрядка здійснюється функцією substr(), яка може приймати два чи три аргументи: substr($str, $start, $end). Допустимо, у нас є рядок $string = "Fluffy cat", і ми хочемо отримати підрядок з другого до четвертого символу. Так як нумерація починається з нуля, то змінна з цим підрядком виглядатиме так: $ newString = substr ($ string, 1, 4). Якщо ми введемо $newString = substr($string, 1), то отримаємо підрядок з другого символу по останній (тобто "luffy"). Цей код ідентичний повному коду рядка за допомогою strlen(): substr($string, 1, strlen($string)).

Для заміни підрядка використовується функція str_replace(), яка приймає три змінні: str_replace($subStr, $newSub, $str). На відміну від багатьох функцій, str_replace() коректно працює з символами кирилиці і не має аналога з префіксом. Приклад:

$str = "Сьогодні жахлива погода!";

$newStr = str_replace("жахлива", "чудова", $str); //Сьогодні чудова погода!

Переведення рядка до числа

Кожному, хто вивчає веб-програмування, рано чи пізно доводиться переводити рядок у число. Для цього використовуються дві схожі функції: intval() та floatval(), кожна з яких приймає одну змінну $string. Один від одного вони відрізняються тільки типом даних, що повертаються: intval() повертає ціле число, а floatval() - число з плаваючою точкою.

Для використання як intval(), так і floatval() необхідно, щоб рядок починався з цифр, вони будуть перетворені в число. Якщо після цифр йтиме будь-який набір букв, вони просто проігноруються. Якщо рядок починається з літер, використання функції поверне нуль. В ідеалі ж рядок має містити у собі виключно цифри.

Переведення числа в рядок

Часто потрібно перевести числа в рядок. Скажімо, якщо необхідно взяти половинку числа та звести її у квадрат (наприклад, перевірити, чи виконується рівність: 88 х 88 + 33 х 33 = 8833). У цьому випадку використовується функція strval(), яка повертає рядок із числом. Після цього з новим рядком можна здійснювати всі інші дії: змінювати, шукати входження підрядка та інші функції. У разі потреби рядок можна знову перевести в число вже описаним вище способом.

У статті було розглянуто лише невелику частину всіх функцій, що з рядками. Частина неописаних функцій працює із символами, але велика не була включена до матеріалу через специфічність. Для ознайомлення з цими функціями необхідно перейти до читання офіційної документації PHP, яка відображає актуальну інформацію.



Подібні публікації