Функция SEARCH (ПОИСК) в Excel. Как использовать?
Функция ПОИСК (SEARCH) в Excel используется для определения расположения текста внутри какого-либо текста и указания его точной позиции.
Что возвращает функция
Функция возвращает числовое значение, обозначающее стартовую позицию искомого текста внутри другого текста. Позиция обозначает порядковый номер символа, с которого начинается искомый текст.
Синтаксис
Аргументы функции
Дополнительная информация
- Если стартовая позиция поиска не указана, то поиск текста осуществляется сначала текста;
- Функция не чувствительна к регистру. Если вам нужна чувствительность к регистру, то используйте функцию НАЙТИ;
- Функция может обрабатывать подстановочные знаки. В Excel существует три подстановочных знака — ?, *, ~.
- знак «?» — сопоставляет любой одиночный символ;
- знак «*» — сопоставляет любые дополнительные символы;
- знак «~» — используется, если нужно найти сам вопросительный знак или звездочку.
Примеры использования функции ПОИСК в Excel
Пример 1. Ищем слово внутри текстовой строки (с начала)
На примере выше видно, что когда мы ищем слово «доброе» в тексте «Доброе утро», функция возвращает значение «1», что соответствует позиции слова «доброе» в тексте «Доброе утро».
Так как функция не чувствительна к регистру, нет разницы каким образом мы указываем искомое слово «доброе», будь то «ДОБРОЕ», «Доброе», «дОброе» и.т.д. функция вернет одно и то же значение.
Если вам необходимо осуществить поиск чувствительный к регистру — используйте функцию НАЙТИ в Excel.
Пример 2. Ищем слово внутри текстовой строки (с указанием стартовой позиции поиска)
Третий аргумент функции указывает на порядковый номер позиции внутри текста, с которой будет осуществлен поиск. На примере выше, функция возвращает значение «1» при поиске слова «доброе» в тексте «Доброе утро», начиная свой поиск с первой позиции.
Вместе с тем, если мы указываем функции, что поиск следует начинать со второго символа текста «Доброе утро», то есть функция в этом случае видит текст как «оброе утро» и ищет слово «доброе», то результатом будет ошибка.
Если вы не указываете в качестве аргумента стартовую позицию для поиска, функция автоматически начнет поиск с начала текста.
Пример 3. Поиск слова при наличии нескольких совпадений в тексте
Функция начинает искать текст со стартовой позиции которую мы можем указать в качестве аргумента, или она начнет поиск с начала текста автоматически. На примере выше, мы ищем слово «доброе » в тексте «Доброе доброе утро» со стартовой позицией для поиска «1». В этом случае функция возвращает «1», так как первое найденное слово «Доброе» начинается с первого символа текста.
Если мы укажем функции начало поиска, например, со второго символа, то результатом вычисления функции будет «8».
Пример 4. Используем подстановочные знаки при работе функции ПОИСК в Excel
Еще больше полезных приемов в работе со списками данных и функциями в Excel вы узнаете в практическом курсе «От новичка до мастера Excel«. Успей зарегистрироваться по ссылке!
Поиск символа в строке PHP с помощью strpos, preg_match и strstr
- Если стартовая позиция поиска не указана, то поиск текста осуществляется сначала текста;
- Функция не чувствительна к регистру. Если вам нужна чувствительность к регистру, то используйте функцию НАЙТИ;
- Функция может обрабатывать подстановочные знаки. В Excel существует три подстановочных знака — ?, *, ~.
- знак «?» — сопоставляет любой одиночный символ;
- знак «*» — сопоставляет любые дополнительные символы;
- знак «~» — используется, если нужно найти сам вопросительный знак или звездочку.
Проверяет, заканчивается ли строка символами, заданными первым параметром. Возвращает true или false. Есть второй необязательный параметр — ограничитель по диапазону поиска. По умолчанию он равен длине строки.
Проверьте, содержит ли строка подстроку
Также важно отметить, что если мы будем искать подстроку “an”, он вернет 6, потому что он возвращает первое вхождение:
Строка.содержит
Далее давайте попробуем String.contains . содержит будет искать подстроку по всей строке и вернет true , если она найдена, и false в противном случае.
В этом примере содержит возвращает true , потому что “Он” найден.
В последнем примере “hey” не найден, потому что String.contains чувствителен к регистру.
Интересным моментом является то, что содержит внутренние вызовы indexOf , чтобы узнать, содержится ли подстрока или нет.
Мы видим , что он проверит, содержится ли подстрока в Строке , игнорируя регистр . Вот почему containsIgnoreCase возвращает true , когда мы ищем “Поезд”, а также “поезд” внутри “Поезда-беглеца”.
Этот подход не будет таким же эффективным, как предыдущие подходы , поскольку требуется дополнительное время, чтобы игнорировать случай. containsIgnoreCase внутренне преобразует каждую букву в верхний регистр и сравнивает преобразованные буквы вместо исходных.
Использование шаблона
Наш последний подход будет использовать Шаблон с регулярным выражением :
Мы можем заметить, что сначала нам нужно построить Шаблон , затем нам нужно создать Совпадения , и, наконец, мы можем проверить с помощью метода find , есть ли вхождение подстроки или нет:
Например, при первом выполнении find он возвращает true , потому что слово “дорога” содержится внутри строки “Hit the road Jack”, но когда мы пытаемся найти то же самое слово в строке “и больше не возвращайся”, оно возвращает false:
Сравнение производительности
Настройка бенчмарка
Как и в каждом бенчмарке JMH, у нас есть возможность написать метод setup , чтобы иметь определенные вещи на месте до запуска наших бенчмарков:
В методе setup мы инициализируем поле message . Мы будем использовать это в качестве исходного текста для наших различных реализаций поиска.
Мы также инициализируем pattern , чтобы использовать его позже в одном из наших тестов.
Строка.Индекс бенчмарка
Мы будем искать, в какой позиции “eiusmod” присутствует в переменной message .
Строка.содержит Бенчмарк
Мы попытаемся найти, содержит ли сообщение значение “eiusmod”, ту же подстроку , которая использовалась в предыдущем тесте.
Наш третий тест будет использовать StringUtils# containsIgnoreCase :
Как и в предыдущих тестах, мы будем искать подстроку в сообщении значении.
Эталонный образец
Мы будем использовать шаблон, инициализированный в методе setup , для создания Matcher и сможем вызвать метод find , используя ту же подстроку, что и раньше.
Анализ результатов контрольных показателей
Важно отметить, что мы оцениваем результаты тестирования в наносекундах .
После завершения теста JMH мы можем увидеть среднее время, затраченное каждым из них:
Метод indexOf является наиболее эффективным, за ним следует метод contains . Имеет смысл, что содержит заняло больше времени, потому что использует indexOf внутренне.
содержит StringUtils IgnoreCase занял дополнительное время по сравнению с предыдущими, потому что он нечувствителен к регистру.
поиск с шаблоном занял еще более высокое среднее время , чем предыдущий, доказав, что использование Pattern s является худшей альтернативой для этой задачи.
Заключение
В этой статье мы рассмотрели различные способы поиска подстроки в строке . Мы также провели сравнительный анализ производительности различных решений.
[expert_bq id=»1570″]поиск с шаблоном занял еще более высокое среднее время , чем предыдущий, доказав, что использование Pattern s является худшей альтернативой для этой задачи. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Также можно использовать > -1 вместо !==. Потому что даже если strpos() вернёт 0 как значение индекса, он всё равно будет больше -1. Но помните, что оператор «больше» (>) работает медленнее оператора строгого неравенства (!==).Методы строк в JavaScript: простая шпаргалка с примерами
Вместе с тем, если мы указываем функции, что поиск следует начинать со второго символа текста «Доброе утро», то есть функция в этом случае видит текст как «оброе утро» и ищет слово «доброе», то результатом будет ошибка.