Привет мои монохромотические друзья. Подскажите одномерному коровьему жмыху как срыть куклоскриптом пикрил посты. Я тут немного начал:exp(/>>\d+\s(?:^>\w)/) Но не работает.
>>206486238Как в регспах обозначит строгое соответствие? Ну типа если ВЕСЬ текст соответствует строке поиска. Как в гугле в "текст". А если есть другой текст типа без знака гринтекста, то не скрывать.
>>206485643 (OP)Никогда не пользовался доллчаном и слабо представляю как оно работает, но давай сформулируем то, что ты хочешь.Ты хочешь скрывать посты, целиком сделанные из гринтекста, я правильно понимаю?Судя по мануалу #exp выдает true если находит подстроку, удовлетворяющую регекспу. Теперь определим, что такое пост, сделанный целиком из гринтекста. Пост из гринтекста это пост, в котором все значимые (непустые) строки начинаются с > Если есть хотя-бы одна значимая строка, не начинающаяся с >, то это не гринтекст.Таким образом, тебе нужно скрывать все посты, в которых ты не нашел "правильной" строки, а это отрицание утверждения "нашел правильную строку".Это что-то вида !#exp(/есть "правильные" строки/)Навскидку "правильная" строка это строка вида ^(?!>).+$^-начало строки(?!>) - негатив лукахед ассерт на > (т.е. следующий символ - не >), хотя можно и негатив чарактер класс [^>].+ один и более значащий символ$ - конец строки.Т.е. !#exp(/^(?!>).+$/)
>>206485643 (OP)Бля, личноя хотел бы скрытия по картинки. Эти треды с оленем просто нереально заебали.
>>206485643 (OP)>Привет мои монохромотические друзья. Подскажите одномерному коровьему жмыху как срыть куклоскриптом пикрил посты.>Я тут немного начал:>exp(/>>\d+\s(?:^>\w)/)>Но не работает.
>>206492112О, я разобрался.Доллчан внутри использует джаваскриптовый test, и он без m считает, что аргумент это строка, поэтому не работают якоря начала и конца строки.Соотвественно, правильный регексп будет!#exp(/(^(?!^>).+$)/m), чтобы включить мультилайн
>>206492597>Бля, личноя хотел бы скрытия по картинки. Эти треды с оленем просто нереально заебали.Есть же сокрытие схожих картинок.
Всё равно полностью автоскрывать весь неугодный бото-котент вы не сможете, так-как кукла под двачи давно подкручена и просто либо не даёт скрывать 100% бототредов/фраз/высеров, либо всё равно выдаёт то, что по идее должно скрываться.
>>206500060Блять, куда-то звездочка проебалась при копировании!( #exp(/(^(?!>).+$)/m) | #exp(/^>>\d(\s\(OP\)|(\(You\)))$/) | #exp(/^$/))Первая строчка - посты, в которых есть правильная строчка.Вторая - посты, состоящие только из одной ссылки на другой постТретья - посты без текста
>>206500264Да чозанах, звездочка проебывается при постинге. Во второй строчке должна стоять перед долларом
>>206501025Читай внимательно, там не хватает звездочки, потому что её гремлины при постинге съедают. Это для того, что бы не скрывать посты со ссылкой на OP или твои посты.Посты, состоящие только из ссылки могут выглядеть одним из 3х способов:>>206500264>>206501025>>206485643 (OP)Для ловли таких постов там стоят якоря начала и конца строки без режима мультилайна, чтобы ловить посты, состоящие ТОЛЬКО из одной цитаты, а не СОДЕРЖАЩИЕ хотя-бы одну цитату. Из-за этого без отдельной обработки постфиксов OP и You некоторые цитаты могут проебаться
>>206501692Потому что спам ссылками это рак.Можешь вторую строчку заменить на#exp(/^(>>\d★(\s\(OP\)|(\(You\)))★\s★)+$/)Будет тебе показывать множественные ссылкиПоскольку гремлины едят мои звездочки, я заменил их на настоящие звездочки. Поменяй обратно, когда будешь копипастить
>>206502304>>206501025Залез в код страницы.(You) вставляется через CSS куклоскрипта, поэтому его нет в тексте поста, и можно исключить из поиска.А вот (OP) приколочен гвоздями намертво, и его надо таки отслеживать.
>>206502951А что разве не важно что идёт после цифр в ссылке? Всё равно же сработает и пост со ссылкой будет проигнорирован дл скрытия.
>>206503358Это только мешать будет, потому что нужно будет еще парсить руками html теги. Нам же нужно не найти в посте ссылки, а убедиться, что кроме них там ничего нет. А для этого приходится рисовать регулярку для структуры поста целиком, а не для той части, которую мы хотим найти. html-теги эту структуру усложняют.
>>206503750>А что разве не важно что идёт после цифр в ссылке? Важно. Важно, что в посте после цыфер нет еще строк с гринтекстом. Можно заебатья с логическими операторами, чтобы точно определить множество "хороших" постов (а потом полученное выражение можно будет попробовать формальными методами трансформировать для удобства написания регулярки), но мне лень.Поэтому просто будем считать, что мы ищем посты, которые ИЛИ содержат "правильные" строки - это первая строкаИЛИ состоят ТОЛЬКО из ссылок - это вторая строка (потому что пост, в котором просто ЕСТЬ ссылки, это в т.ч. гринтекст ровно как на оп пике)ИЛИ имеют пустое тело (с вложением, видимо).И вот со второй категорией надо быть аккуратным, чтобы не пропустить гринтекст. Для этого при текущей логике обработки нужно поставить ограничения на то, что идет до и после ссылки.
>>206504274Собственно ты много сделал. И пикрил работает пока со всеми исключениями что в треде. Но надо тестить ещё.
>>206504317>Э, я что-то не знаю или..где это? крестик - скрывать схожие картинки. Теоретически, по хешу изображения, т.е. без привязки к имени файла.
>>206504274>И вот со второй категорией надо быть аккуратным, чтобы не пропустить гринтекст. Для этого при текущей логике обработки нужно поставить ограничения на то, что идет до и после ссылки.Кто вайпает гринтекстом тупая школота и вряд ли будут другие изощрённые сценарии. Только тсс
>>206506695>>206506809Да, я таки оказался туповат. Благодарю, я вообще не понял изначально что это. Думал, что клиент для андрюши или что-то такоеВ общем, разобрался, благодарю
>>206508330Так, слегка подумал над работой test и пофиксил, чтобы отлавливать как однострочники по ссылке, но надо проверить, что ничего не сломалось большеВторую строчку заменить на#exp(/^(>>\d★[^\n]★\n★)+$/)Это сообщение, которое состоит из строк, начинающихся на >>Ключик - группа захвата кончается на поедание всех найденных концов строки, поэтому при каждом переводе строки в посте оно снова будет ждать строку, начинающуюся со ссылки.
>>206510437Пока не нашёл исключенийЭто магия. Реально я уже потерял нить. Так и не понял почему выше строка оканчиваетя на /m а остальные нет.
>>206514412>Так и не понял почему выше строка оканчиваетя на /m а остальные нетТы можешь думать об #exp как об этаком грепе. Если он находит в посте подстроку, удовлетворяющую регулярному выражению, он отдает true. Заметь, не проверяет соответствие поста шаблону, а проверяет, есть ли внутри хоть что-нибудь, что под шаблон можно подогнать. Но тут вопрос - что такое "находит в посте"?Пост можно рассматривать с двух сторон. С одной стороны это последовательность символов, с точки зрения движка регулярки ограниченная якорями ^ и $. Между ними - текст. Так работает #exp без m.С другой стороны, это последовательность строк, каждая строка ограничена якорями ^ и $. Так работает #exp с mКогда мы ищем подстроку в тексте, то, скажем, . заматчит нам весь пост от начала и до конца. Когда мы ищем подстроку в наборе строк, то . заматчит нам только одну строку. Первая строчка /(^(?!>).+$)/m говорит нам матчить последовательность, в которой после якоря ^ идет любой символ кроме >, а дальше до якоря $ просто любой символ. Фишка в том, где эти якоря располагаются. С m это начало и конец строки, поэтому это для каждой строки матч (?!>).+. Если он находит хотя-бы одну такую строку, то заебись. Если бы m не было, на весь пост было бы по одному якорю ^ и $ - в начале и конце поста. И (?!>).+ значило бы "пост, который начинается не с >, а дальше хоть трава не расти". Если в посте несколько строк, и первая из них начинается с >, то весь пост летит в топку. Вторая строчка в последней версии ловит посты, в которых каждая строка начинается со ссылки. Мы условились считать, что хотим такие посты видеть. Поскольку нам интересно найти не хотя-бы одну ссылку, а удостовериться, что каждая строка - ссылка, нам удобнее без m. Фраза (>>\d[^\n]\n) означает "блок текста, который начинается на >>цыфры, потом идет любая бадяга кроме конца строки, потом идет конец строки (или несколько, может там ниже пустые строки, нам так ноже норм. Или ни одного, тогда пост длиной в одну строку и нам так ноже норм). Последняя часть с \n тут важна, потому что если в посте вообще есть переводы строки, то наша группа захвата закроется и + после скобочек начнет набирать новую группу, обязанную начаться с >>.Всё это счастье обрамляется якорями ^ и $, чтобы убедиться, что мы начинаем считать сразу после начала поста и завершаем сразу перед концом, и никакие строки с гринтекстом не смогут влезть по краям. Если бы их не было, то перед нашим блоком ссылок и после него можно было бы вставить гринтекст, а наш #exp радостно бы отрапортовал, что внутри него есть блок ссылок. То же самое случилось бы, если бы мы впихнули m.Последняя строчка тупо матчит пустые строки.Если очень грубо, #exp с m позволяет нам ответить на вопрос, существует ли в посте строка заданного вида. #exp без m и с аккуратным использованием якорей ^ и $ позволяет нам ответить на вопрос, состоит ли пост ТОЛЬКО из блоков определенного вида
>>206516205>Последняя часть с \n тут важна, потому что если в посте вообще есть переводы строки, то наша группа захвата закроется и + после скобочек начнет набирать новую группу, обязанную начаться с >>.Вот это ускользало. Спасибо.Абу благословил этот пост.
>>206485643 (OP)>Привет мои монохромотические друзья. Подскажите одномерному коровьему жмыху как срыть куклоскриптом пикрил посты.
>>206516205Тут ещё надо уточнить. Ссылка вида >>206516205 в посте детектируется первым #еxp как false, а вот вторым как true, последним false. В итоге false or true or false = true, но впереди стоит отрицание, значит false т.е. не скрываем. Вот если все "or" false, в итоге будет !false=true, т.е. скрываем. Правильно? Ну там таблицы истинности и всё такое.
>>206519351Ссылка вида >>206516205 в посте детектируется первым #еxp как falseНе совсем. Ты можешь рассматривать первый #exp (который с /m) как конструкцию #exp(/первая строка/) or #exp(/вторая строка/) or ...Соответственно, первый #exp==true если хотя-бы одна строка дает true. При этом да, строка, начинающаяся со ссылки дает false. Если все строки начинаются со ссылки, то да, в сумме будет false. Но пост, все строки которого начинаются со ссылки, мы рассматриваем во втором #exp. Наша конструкция ищет потенциально ценные посты по признакам (или там есть интересные строки, или там только ссылки, или там пусто), а все остальные отправляет в топку.
>>206520899Для меня словно гипотезу пуанкаре доказать. Но с твоей помощью теперь спокойней можно мылач читать.
lo and behold ye heathens#exp(/^(((\n)|(>>\d+[^\n]★))★(>[^>][^\n]+\n★)+((\n)|(>>\d+[^\n]★))★)+$/)Это без восклицательного знака на старте. Теоретически, это анатомия гринтекста, но я сильно неуверен. У меня от неё голова болит.На этом треде она, вроде, работает, но надо тестить, как оно будет в боевых условиях.В чуть более удобоваримом виде это выглядит как#exp(/^(((\n) |(>>\d+[^\n]★))★(>[^>][\n]+\n★)+((\n) |(>>\d+[^\n]★))★)+$/)Тут проглядывается структура. Грубо говоря, гринтекст это полимерная цепочка из атомов гринтекста.Где атом гринтекста это ядро (>[^>][\n]+\n★)+ (несколько строк собственно гринтекста) , опционально окруженное оболочкой из (\n) переводов строки или (>>\d+[^\n]★) ссылкоты.Я сломал об это голову.
>>206524750А, да, говорят, дашчан это клиент имиджборд для андроида, и там есть скрывание по регулярке.Дак вот, теоретически эта регулярка должна туда подойти, если там движок регулярных выражений такой же как в жабаскрипте.
>>206508469>>206524878Пингуем дашчанера, пусть попробует.Еще забыло добавить, что ядро гринтекста теоретически должно детектиться криво, там должна быть минимум строка вида >символсимвол. Если в гринтексте есть цитаты пустых или односимвольных строк, оно проебется. Надо допиливать
>>206525021>>206524750Попробуйте ядро(>(?!>)[^\n]★\n★)+Должно быть более корректно по части ловли пустых строк