Гайд по регэкспам
Гайд по использованию регэкспов в автоскрытии двача. Многое здесь опущено, но приведённого достаточно, чтобы скрыть то, что надо. Как включить автоскрытие расписано с картинками по ссылке.
- Экранирование и специальные символы
- ? - символ либо встретится, либо нет
- [] - выбор из вариантов символов
- | - выбор из вариантов строк, "ИЛИ"
- \s - все пробельные символы и другие сочетания со слэшем
- [а-я] - указать диапазон символов
- {} - указать число символов
- Точка - любой символ
- ^ $ - начало и конец строки
- Ссылки
Экранирование и специальные символы
Регэкспы так устроены, что некоторые символы - специальные и используются в навороченных регэкспах. То есть, если ты захочешь скрыть "сл()во", то правило "сл()во" не сработает. Более того - может скрыть что-то другое. Перечень таких символов:
Чтобы правило с ними заработало, нужно их экранировать - то есть вставить обратный слэш \ перед ними. Правильный регэксп, реагирующий на "сл()во" - это "сл()во"
Заебёшься вставлять слэши? Для этого придуман конвертер, он находится в нижнем левом углу окна автоскрытия. В левое поле вставляешь то, что хочешь скрыть. В правом поле появится это слово с расставленными слэшами. Копируешь и вставляешь в графу "Тема" или "Сообщение".
N.B. Один обратный слэш (как в примере выше) нужен, если ты решил просто вставить правило, нажав кнопку "добавить". Если ты готовишь гигантский файл автоскрытия для импорта, то там все обратные слэши надо удвоить:
["сл()во", "", "", "", "", "", "сл\\(\\)во", ""]
Иначе макаба не примет автоскрытие и выдаст ошибку "Неверный формат".
? - символ либо встретится, либо нет
Вопросительный знак ? означает, что символ перед ним может как встретиться, так и не встретиться. Например, так можно учесть безграмотное написание ться/тся:
"хочет" и "ся должно обязательно встретиться, чтобы регэксп сработал, а вот насчёт мягкого знака - вопрос. Поэтому это правило скроет два варианта: "хочется" и "хочеться".
Вопросительный знак может действовать сразу на целую часть строки - для этого надо эту часть строки заключить в скобки. Например,
среагирет как и на "оцени анона", так и на "оцени внешку анона". Читается так: "оцени " встречается обязательно, "внешку " может и не встретиться, "анона" опять обязательно. Заметь, что второй пробел надо добавить в скобки - иначе без скобок регэксп получается "оцени анона" с двумя пробелами, а пост с одним пробелом не скроется.
Можно так действовать и на часть слова:
Действует как предыдущий регэксп, но вместо "оцени" может быть и "оцениваем".
[] - выбор из вариантов символов
В квадратные скобки можно запихнуть несколько символов, каждый из которых может встретиться в строке. Например, так можно учесть неправильное написание слов:
Этот регэксп сработает аж на четыре варианта: "кунчик", "кунчиг", "кунчек" и "кунчег". Ещё с квадратными скобками можно учесть замену русских букв на похожие латинские:
Не обязательно указывать и заглавную, и строчную буквы, они тут для примера.
А вообще, проблему можно решить радикальнее: [а-я][a-z][а-я]. То есть скрыть все посты, где есть слова, где сначала идёт русская буква, потом английская, а потом снова русская. [а-я] обозначает диапазон от А до Я, но о диапазонах символов потом будет подробнее.
Вопросительный знак можно применить сразу ко всей скобке:
скроет в том числе и "кунчк" (без буквы Е).
| - выбор из вариантов строк, "ИЛИ"
Для выбора из нескольких вариантов строк используют круглые скобки и вертикальную черту. Так можно запихнуть сразу несколько слов в один регэксп:
среагирует и на "фурри", и на "furry".
Черту можно использовать в круглых скобках - тогда выбор будет только в части регэкспа.
среагирует на "такая...", "такой..." и "такие...". Здесь нельзя использовать квадратные скобки, так как выбор не из отдельных символов, а из строк (состоящих из нескольких символов). Тем не менее, заменить квадратные на круглые с чертой можно: ...не буд(е|у)т...
\s - все пробельные символы и другие сочетания со слэшем
Некоторые сочетания обратного слэша с буквой обозначают сразу группу символов.
- \s - любой пробельный символ. То есть помимо пробела, ваш регэксп будет реагировать ещё и на перевод строки, табуляцию и некоторые другие пробелозаменители. Ставится вместо пробела:
- \d - любая цифра: 0123456789. Это короткая запись для [0123456789]
- \b - граница слова значит, что тут либо начинается/заканчивается пост, либо идёт пробел, разделяющий слова. Следующий регэксп скроет слово "ролл", встретившееся отдельно (то есть не в составе другого слова, как "скроллить" или "реролл"):
Используй это, если не хочешь, чтобы скрылись слова, в которых "ролл" (или что там у тебя) это лишь часть.
[а-я] - указать диапазон символов
У каждого символа есть свой номер в Юникоде. Поэтому можно указать диапазон от одного символа до другого включительно, написав между ними дефис. Также эти диапазон можно складывать, просто написав два таких диапазона подряд. Тут приведу только самое необходимое:
- [a-z] - буквы латинского алфавита
- [а-яё] - буквы русского алфавита. Буква Ё - отдельно!
- [0-9] - все цифры, альтернатива \d
{} - указать число символов
Если нужно указать, что символ или строка могут повторяться, указывают возможный диапазон в фигурных скобках. Фигурные скобки можно ставить после просто букв, круглых скобок или квадратных скобок. Все диапазоны - включительно. Например,
скроет посты, где между "два" и "слова" от одного до десяти пробелов.
Можно убрать верхнюю границу - тогда регулярка будет реагировать хоть на тысячу букв подряд. Запятую при этом оставляем. Например,
скроет "блять", "бляять", "бляяять" и так далее, пока клавиатура не треснет.
Полезное применение в сочетании с квадратными скобками - указать все окончания:
скроет все вариации слова "инцельский", во всех родах и падежах.
Точка - любой символ
Точка означает, что на её месте может быть абсолютно любой символ.
Можно использовать в сочетании с фигурными скобками - по сути это будет значить "столько-то символов чего угодно":
скроет всё от "в чём не прав" до "в чём этот уважаемый господин не прав". Вопросительный знак относится к пробелу.
^ $ - начало и конец строки
Чтобы, что пост должен именно начинаться с заданных слов, используют карет (крышечку). Пример:
скроет то, что начинается на "посрал" или "не посрал", но оставит пост, где слово "посрал" встретилось в середине.
Знак доллара используют, чтобы показать конец строки:
скроет пост, который будет заканчиваться на "с меня нихуя".
Можно использовать ^ и $ вместе:
скроет пост, полностью состоящий из слова "ролл".
Символы ^ и $ нельзя помещать в квадратные скобки. Но их можно поместить в круглые скобки, где выбор из вариантов обозначается вертикальной чертой. Разберём альтернативу регэкспу "\bролл\b", о котором было выше:
"Раскроем" скобки, выписав все варианты. Получается четыре варианта:
То есть регэксп сработает только на отдельное слово - и слово может стоять и в начале, и в середине, и в конце поста. Вместо "ролл" можно подставить любое другое выражение.