Поиск текста по регулярным выражениям php

109
05 октября 2019, 08:00

Перепробовал все варианты не могу найти решение.Есть строчка "Volvo XC40 (2018) интерьер" собственно нужно найти слово "интерьер" но это слово встречается и верхнем регистре и в нижнем (интерьер, Интерьер, ИНТЕРЬЕР); Если слова есть то true нет false.

Answer 1

Вам подойдёт регулярное выражение "/интерьер/ui" В коде это будет выглядеть примерно вот так:

$string = 'Volvo XC40 (2018) иНтЕрьЕр';
//Следующая строка вернёт true или false независимо от регистра
$result = preg_match('/интерьер/ui', $string); 

Вся магия во флагах которые мы добавляем в конец регулярки:
u - отвечает за восприятие юникода
i - делает регулярное выражение нечуствительным к регистру.

Так же, не забывайте про наличие якорей:
^ - начало строки
$ - конец строки

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

А вообще рекомендую отличный ресурс для тестирования регулярок https://regex101.com/

Answer 2

Должно сработать что-то вроде

(И|и)(Н|н)(Т|т)(Е|е)(Р|р)(Ь|ь)(Е|е)(Р|р)

Но уверен есть более лаконичное решение

Answer 3

выбирайте и старайтесь всегда тестить варианты

$str = 'Volvo XC40 (2018) интерЬер';
$cycle = 100000;
function var1($str)
    {
        $r = 0;
        if(mb_strstr($str, 'интерьер') || mb_strstr($str, 'Интерьер') || mb_strstr($str, 'ИНТЕРЬЕР'))
            {
                $r = 1;
            }
        return($r);
    }
function var2($str)
    {
        $r = 0;
        if(mb_stristr($str, 'интерьер'))
            {
                $r = 1;
            }
        return($r);
    }
function var3($str)
    {
        $r = 0;
        if(preg_match('/интерьер/ui', $str))
            {
                $r = 1;
            }
        return($r);
    }
function var4($str)
    {
        $r = 0;
        $str = mb_strtolower($str);
        if(mb_strstr($str, 'интерьер'))
            {
                $r = 1;
            }
        return($r);
    }
function var5($str)
    {
        $r = 0;
        $str = strtr($str,['И'=>'и','Н'=>'н','Т'=>'т','Е'=>'е','Р'=>'р','Ь'=>'ь',]);
        if(mb_strstr($str, 'интерьер'))
            {
                $r = 1;
            }
        return($r);
    }
function var6($str)
    {
        $r = 0;
        //$str = strtr($str,['И'=>'и','Н'=>'н','Т'=>'т','Е'=>'е','Р'=>'р','Ь'=>'ь',]);
        if(strtr($str,['интерьер'=>'','Интерьер'=>'','ИНТЕРЬЕР'=>'',]))
            {
                $r = 1;//echo $str;die;
            }
        return($r);
    }
$start = microtime(true);//запускаем таймер
for($i=0;$i<$cycle;++$i)
    {
        if(var1($str))
            {
                //echo 'true';
            }
    }
echo 'var1 '.(microtime(true) - $start).PHP_EOL;
$start = microtime(true);//запускаем таймер
for($i=0;$i<$cycle;++$i)
    {
        if(var2($str))
            {
                //echo 'true';
            }
    }
echo 'var2 '.(microtime(true) - $start).PHP_EOL;
$start = microtime(true);//запускаем таймер
for($i=0;$i<$cycle;++$i)
    {
        if(var3($str))
            {
                //echo 'true';
            }
    }
echo 'var3 '.(microtime(true) - $start).PHP_EOL;
$start = microtime(true);//запускаем таймер
for($i=0;$i<$cycle;++$i)
    {
        if(var4($str))
            {
                //echo 'true';
            }
    }
echo 'var4 '.(microtime(true) - $start).PHP_EOL;
$start = microtime(true);//запускаем таймер
for($i=0;$i<$cycle;++$i)
    {
        if(var5($str))
            {
                //echo 'true';
            }
    }
echo 'var5 '.(microtime(true) - $start).PHP_EOL;
$start = microtime(true);//запускаем таймер
for($i=0;$i<$cycle;++$i)
    {
        if(var6($str))
            {
                //echo 'true';
            }
    }
echo 'var6 '.(microtime(true) - $start).PHP_EOL;
READ ALSO
Откат транзакции в PHP (MariaDB, InnoDB) при нескольких параллельных транзакциях изменяющих одинаковые поля

Откат транзакции в PHP (MariaDB, InnoDB) при нескольких параллельных транзакциях изменяющих одинаковые поля

У меня есть несколько PHP кодов с PDO транзакциями, измняющими одинаковые поля в базе данныхКоды могут запускаться в разные моменты времени

120
Содержимого формы нет в письме

Содержимого формы нет в письме

Настроил скрипт отправки формы, письмо доходит, но без данных формыФорма:

116
Laravel ошибка про имэйл

Laravel ошибка про имэйл

сама ошибка

90
Пример создания блокнота не работает

Пример создания блокнота не работает

Пытаюсь запустить пример создания блокнота из туториалов Qt (https://docqt

148