YuS_2
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Richard_Nixon Цитата: Копаем дальше. Скрипт отрабатывает фильтр, если: $finc2="\bFTPR_READER\b" Скрипт не отрабатывает фильтр, если: "$finc2="\bREADER\b" или "$finc2="\b_READER\b" или "$finc2="\bREADER&\b"; # регистр не играет роли Задаю такой фильтр: Цитата: $finc2="\bFTBIB_READER|\bFTPR_READER|\bFTALL_READER\b" Работает, результат проверяю. | Регэкспы необходимо задавать правильно. Вы взяли те шаблоны, которые составлял я, но в них-то нет учета контекста... Я просто взял Ваши строчки, добавил к ним границы слова \b и всё на том. А не работают мои шаблоны, потому, что в тексте просто нет совпадений по ним. Поясню на Вашем примере. Мы ищем: Код: что дословно означает: ищем границу слова, сразу за ней символ "r", за ним "e" и т.д. до полного совпадения. Теперь смотрим на текст: Код: В этом тексте совпадения не будет найдено, т.к. символ нижнего подчеркивания не является разделителем слов, т.е. там просто нет границы слова. В этом случае нам необходим скорректированный шаблон. Например так: Код: что дословно означает: найти символ "r", следующий за символом нижнего подчеркивания (причем, в такой именно записи, сам символ нижнего подчеркивания не захватывается, он работает как условие выбора начального символа "r"), далее сразу за ним ищем символ "e" и т.д. до полного совпадения. Цитата: $finc2="\bFTBIB_READER|\bFTPR_READER|\bFTALL_READER\b|\bFTNG_READER\b|\bFTLIT_READER\b" $finc3="|\bfulltext&c21com=2&p21dbn|\b" | Во втором шаблоне лучше сделать оптимизацию регулярки В третьем фильтре "$finc3" с регэкспом ошибки... символ вертикальной черты "труба", в регэкспах работает как выбор альтернативы... В общем, здесь, с учетом вышеизложенного, я бы записал так: Код: $finc2="\b(?>FTBIB|FTPR|FTALL|FTNG|FTLIT)_READER\b" $finc3="(?<=_)fulltext&c21com=2&p21dbn\b" | | Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 13:26 29-03-2017 | Исправлено: YuS_2, 13:29 29-03-2017 |
|