Не правильно работает функция preg_match()

429
25 января 2017, 01:11

Здравствуйте, задание: Написать функцию, которая выводит список файлов в заданной директории, которые содержат искомое слово. Директория и искомое слово задаются как параметры функции. Все написал правильно, загвоздка как я понимаю в функции preg_match(), которая должна искать соответствие регулярному выражению и возвращать 1 если соответствие есть, у меня возвращает везде ноль, хотя файл с таким текстом имеется, не могу понять в чем причина, может регулярное выражение составлено неправильно, хотя его проверял на сайте http://regexr.ru/ Ниже привожу полный код php:

<html>
<head>
    <meta charset="utf-8"/>
    <title>Задание 5</title>
    <style>
    </style>
</head>
<body>
    <h3>5. Написать функцию, которая выводит список файлов в заданной директории,
    которые содержат искомое слово.
    Директория и искомое слово задаются как параметры функции.
    </h3>
    <form action="05.php" method="post" name="dir">
        <h4>Задайте директорию для вывода списка файлов:</h4>
        <p><lable><input type="radio" name="dir_name" value="first_dir" checked> Первая диреткория</lable></br>
        <p><lable><input type="radio" name="dir_name" value="second_dir"> Вторая диреткория</lable></br>
        <p><lable><input type="radio" name="dir_name" value="third_dir"> Третья диреткория</lable></p>
        <p>
            <lable>Искомое слово: </br><input type="text" name="search" value="один"></lable>
            <input type="submit" value="Поиск" />
        </p>
    </form>
<?php
    //Функция удаления слов из файла
    function displayFilesListSearch ($dir, $search) {
        $files = glob($dir."/*.txt"); //Находим все текстовые файлы в заданной директории
        foreach ($files as $file){
            //echo "$search </br>";
            if (preg_match("/\s[$search]\s/ui" ,file_get_contents($file))){
                echo $file;
            };
        };
    };

    //Услвоия выполения 
    if (array_key_exists('dir_name', $_POST) && strlen($_POST['dir_name'])){
        displayFilesListSearch($_POST['dir_name'], $_POST['search']);
    };
?>
</body>
</html>

P.S. Файл в соотвествующей директории создан и там присутствует искомое слово, проверял. Может дело в кодировке? В файле установил utf-8 без BOM.

Answer 1

Если я не ошибаюсь, у функции preg_match есть ограничение на количество принимаемых символов из источника 10000 символов.

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

if (preg_match("/\b($search)\b/msui", file_get_contents($file))){
    echo $file;
};
READ ALSO
Как вывести данные из базы EAV в таблицу?

Как вывести данные из базы EAV в таблицу?

Есть база EAV с таблицами: product - продукты (ключ: product_id); params - параметры продуктов (ключи: product_id, param_id); value - значения параметров продуктов (ключ:...

301
Дописывать строки в файл CSV php

Дописывать строки в файл CSV php

Этот код почему-то удаляет все данные из файла и записывает новые при каждом вызове saveRow()

472
Асоц массивы php

Асоц массивы php

Как через foreach вывести элементы массива ?

331
Можно ли узнать статус пользователя в whatsApp?

Можно ли узнать статус пользователя в whatsApp?

Можно ли через API по номеру человека узнать, в онлайне он сейчас или нет?

310