Regex를 사용하여 감시 단어 설정하기

:bookmark: 이 주제는 Discourse의 Watched Words 기능 내에서 정규식(regex)을 효과적으로 사용하는 방법을 설명합니다.

:discourse: 우리 호스팅을 사용하는 사이트에서는 이 설정이 숨겨져 있습니다. 유료 호스팅 플랜 고객은 team@discourse.org로 문의하여 Watched Words에 대한 정규식 사용을 요청할 수 있습니다.
참고: 이 기능은 무료 호스팅 플랜에서는 사용할 수 없습니다.

정규식(regex)은 검색 패턴을 정의하는 강력한 도구입니다. Watched Words 기능에서 정규식을 사용하면 Discourse 사이트의 단어 필터링 정확도와 유연성을 높일 수 있습니다.

:information_source: Watched Words에서 정규식을 사용하려면 먼저 watched_words_regular_expressions 사이트 설정을 활성화해야 합니다.

:warning: 정규식은 매우 강력하므로 위험할 수 있습니다. 잘못 작성된 정규식 문장은 사용자에게 문제를 일으킬 수 있습니다. 라이브 환경에 배포하기 전에 비생산(개발/테스트) 인스턴스에서 정규식 문장을 테스트하십시오.

정규식 패턴 예시

다음은 일반적인 정규식 패턴과 그 사용 방법입니다:

대소문자 무시

기본적으로 Discourse는 단어의 대문자와 소문자 형태를 모두 일치시킵니다.

thread

이것은 thread, THREAD, thReAd를 모두 일치시킵니다.

문자 대안

문자 대안을 사용하여 일치 범위를 확장할 수 있습니다.

(t|7)hr(3|e)(4|a)d

이것은 위의 모든 경우 외에도 thr3ad, 7hread, thr34d를 일치시킵니다.

threads?\b

이것은 threadthreads는 일치시키지만 threadedthreading은 일치시키지 않습니다.

단어 경계

정규식 패턴은 의도치 않게 단어의 일부와 일치할 수 있습니다. 부분 일치(partial match)를 방지하려면 단어 경계를 사용하십시오.

\bthreads?\b

이것은 threadthreads를 일치시키지만 threadlikeunthreading 같은 일치는 피합니다.

유니코드 문자 처리

표준 단어 경계는 유니코드 문자에서 실패할 수 있습니다. JavaScript 정규식으로 잘 처리되지 않는 문자를 위한 경계를 만들어야 합니다.

gr(ü|ue)(ß|ss)e

이것은 gruesseGRÜSSE를 포함하여 grüße 단어의 모든 일반적인 철자 형태를 일치시킵니다.

예를 들어 Über라는 단어는 차단하되 Übersicht는 차단하지 않으려 한다고 가정해 보겠습니다. \b(ü|ue)ber\b와 같은 단어 경계는 일부 JavaScript 정규식 단어 플래그가 유니코드 문자를 처리하지 않기 때문에 작동하지 않습니다. 대신 직접 경계를 만들어야 합니다.

(?:^|\s)(ü|ue)ber\b

이제 이 패턴은 Überueber를 적절히 일치시키지만 Übersichtuebersicht는 일치시키지 않습니다.

의도적인 문자 치환 포착

사용자가 문자 대신 숫자나 특수 문자를 치환한 단어를 포착하려면:

\bp[a@]ssw[o0]rd\b

이것은 password, p@ssword, passw0rd, p@ssw0rd를 일치시키지만 mypasswordpassword123는 일치시키지 않습니다.

구두점 사이 문자 처리

필터를 우회하기 위해 구두점을 삽입하는 시도를 포착하려면:

\bs\W*p\W*a\W*m\b

이것은 spam, s.p.a.m, s-p-a-m을 일치시키지만 s_p_a_m(밑줄은 문자(word character)입니다), spammy, myspam은 일치시키지 않습니다.

여러 단어 변형 일치

서로 다른 단어 형태로 나타날 수 있는 구문을 일치시키려면:

\b(contact|email|reach)( us| me)?\b

이것은 contact, contact us, contact me, email, email us, email me, reach, reach us, reach me를 일치시킵니다.

이메일 패턴 감지

일반적인 이메일 주소 패턴을 포착하려면:

\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}\b

이것은 user@example.com, my.name@sub.domain.co.uk, user+tag@domain.org를 일치시킵니다.

해시태그 변형 찾기

서로 다른 대소문자나 미세한 변형을 가진 해시태그를 일치시키려면:

\#(disc[o0]urse|f[o0]rum)\b

이것은 #discourse, #DISCOURSE, #disc0urse, #forum, #f0rum을 일치시키지만 #discourseengine이나 #forums는 일치시키지 않습니다.

반복 패턴 감지

스팸성 콘텐츠일 수 있는 반복 문자를 포착하려면:

([a-zA-Z])\1{3,}

이것은 aaaample, helllllo, yessssss를 일치시키며, 4회 이상 연속으로 반복되는 모든 문자를 감지합니다.

프로토콜 유무와 관계없이 URL 찾기

\b(?:https?:\/\/)?[\w-]+(\.[\w-]+)+\b

이것은 example.com, sub.domain.org, https://discourse.org, http://meta.discourse.org를 일치시킵니다.

중첩된 문자 클래스 피하기

올바른 예:

(hold)?

이것은 선택적 단어 "hold"를 올바르게 일치시킵니다.

또는 문자 대안을 원한다면:

[h][o0][l1][d]

이것은 hold, h0ld, ho1d, h01d를 일치시킵니다.

잘못된 예:

[h[o0][l1]d]?

이것은 문자 클래스를 잘못 중첩하려고 하며, h, o, 0, l, 1, d 중 어떤 단일 문자와도 일치하여 had, old 같은 단어와도 일치하게 됩니다.

선택적 단어를 위한 괄호 사용

올바른 예:

forum(s)?

이것은 forum, forums를 올바르게 일치시킵니다.

잘못된 예:

forum[s]?

이것은 “forum” 뒤에 선택적인 "s"가 오는 것을 일치시키지만, 불필요하게 문자 클래스를 사용합니다.

올바른 문자 클래스 사용

올바른 예:

bad word

“bad word” 구문을 일치시키기 위해

또는 문자 클래스 예시로:

[bB][aA][dD]

이것은 bad, Bad, bAd, BAD 등을 일치시킵니다.

잘못된 예:

[bad word]

이것은 “bad word” 구문이 아니라 b, a, d, w, o, r, d 중 어떤 단일 문자와도 일치합니다.

한정자(Quantifier) 효과적으로 사용하기

\b[0-9]{3,5}\b

이것은 3~5자리 숫자를 일치시킵니다: 123, 1234, 12345는 일치하지만 12123456은 일치하지 않습니다.

특정 반복 패턴의 경우:

(spam){2,3}

이것은 spamspam, spamspamspam을 일치시킵니다.

단어 경계 올바르게 적용하기

경계 없이:

free

이것은 free, freedom, carefree를 일치시킵니다.

경계 사용:

\bfree\b

이것은 free만 일치시키고, freedom이나 carefree는 일치시키지 않습니다.

유니코드 문자 올바르게 처리하기

올바른 접근법:

(?:^|\s)(ö|oe)zel\b

이것은 özel, oezel을 단어 경계에서 일치시키며, 유니코드 문자가 포함된 경우에도 작동합니다.

잘못된 접근법:

\bözel\b

이것은 터키어 문자 ö와 함께 올바르게 작동하지 않을 수 있습니다.

추가 정보

:information_source: regex101: build, test, and debug regex 정규식 표현식을 테스트할 수 있습니다. 그렇게 할 경우, 정규식 맛(flavour)을 ECMAScript로 전환했는지 확인하십시오.

Watched Words 대체 값에서 정규식 캡처 그룹 백레퍼런스(예: 대체 문자열의 \1)는 지원되지 않습니다. replace 및 link 작업은 매칭을 위해 정규식을 지원하지만, 대체 값은 항상 리터럴 문자열입니다.

13개의 좋아요

초보자의 실수 용서해 주세요. watched words regular expressions 설정을 사이트 설정에서 어디에도 찾을 수 없었습니다. regex, regular expression 및 기타 변형어도 검색해 보았지만, 감시 단어에 정규식을 활성화할 수 있는 것으로 보이는 설정을 찾지 못했습니다. 이 설정을 활성화할 수 있는 사이트 설정의 슬러그를 아시나요 (클라우드 호스팅 인스턴스)?

수정 답변은 바로 위에 있었고 여기에서 찾았습니다.

2개의 좋아요