Подскажите по регуляркам


cscope
327

Есть парсер где можно задать регулярки для фильтрации определенных текстов.

Например чтобы парсить русскоязычные текста задаю [а-я]+ но если в тексте присутствует хотя бы 1 русское слово, то текст парсится несмотря на то, что весь остальной текст английский, а существует ли какая то регулярка чтобы задать что то вроде «парсить если большая часть текста на русском» ?


edogs software

Нету.

Что бы не находило совсем уж хлам, то можно нечто вроде ([a-я]{3,}.*){4,} — 4 русских слова длиной не меньше 3 символов.

А иначе надо перепроверять найденное отдельно.


ivan-lev

cscope:
парсить если большая часть текста на русском

Определиться с терминологией.. Что есть «большая часть на русском»? Количество слов? Букв?.. Ещё цифры могут попадаться..

Но в целом:

Если варианта только два (русский/английский) без всяких «умляутов» — можно определить длину текста в разных кодировках..

Можно без регулярки посчитать количество кириллических символов..

Можно через preg_match_all (без указания третьего параметра) получить количество букв([а-я]) (или слов ([а-я]+)) русскоязычных.. и на него ориентироваться.

При наличии тэгов — предварительно прогнать через strip_tags..

Но это всё не совсем про «задать регулярку»..


jkm

Если текста там в пределах нескольких килобайт, то регуляркой можно проверить, что не менее половины символов это русские буквы.

^(?i:([а-яё](?-1)*[^а-яё]?)|([^а-яё](?-1)*[а-яё]))*+$

https://regex101.com/r/TIH0dV/1


[Удален]

cscope, по любому парсер работает уже с полученными данными, зачем ему ставить условия, спарсить всё, а потом разобрать что нужно, а что нет


cscope

burunduk:
cscope, по любому парсер работает уже с полученными данными, зачем ему ставить условия, спарсить всё, а потом разобрать что нужно, а что нет

Можно наверное и в нотепаде потом отсеять, но там опять же нужно регулярку знать + задать параметры начала и окончания статьи, а они немного разные.

Спасибо попробую то что выше предложили.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *