2013-02-12 4 views
4

이것은 수백 번 이상 질문을 받았지만 다른 솔루션을 내 요구에 맞추는 데 어려움을 겪고 있습니다.Java & Regex : 특정 문자가 앞에 오지 않는 부분 문자열 일치

내 Java 응용 프로그램에는 채팅 메시지의 나쁜 단어를 검열하는 방법이 있습니다. 그것은 내 말의 대부분을 위해 일하지만, 내가 제거 할 수없는 하나의 특별한 (그리고 인기있는) 저주 단어가있다. 그 단어는 "faen"(문제의 언어에서 "사탄"에 대한 단순한 현대 속어)입니다.

여러 개의 A와 E를 일치시키기 위해 "fa + e + n"패턴을 사용합니다. 그러나이 언어에서 "그 소파"또는 "그 소파"라는 단어는 "소파"입니다. 나는 [^ so]와 (?! = so)의 변형을 사용하여 여러 가지 접근법을 시도했지만 지금까지 다른 것과 일치하는 방법을 찾을 수 없었습니다.

여기의 진정한 목표는 모음의 수에 관계없이 단어의 구성 요소 사이에있는 비 문자가 무엇이든 상관없이 나쁜 단어를 매치시킬 수 있다는 것입니다.

여기에 내가 할 노력하고있어 몇 가지 예를 다음과 같습니다

"String containing faen"      Should match 
"String containing sofaen"      Should not match 
"Non-letter-censored string with [email protected]"  Should match 
"Non-letter-censored string with [email protected]" Should not match 

모든 팁이에 대한 올바른 방향으로 날을 설정?

답변

2

너는 \bf[^\s]+a[^\s]+e[^\s]+n[^\s]\b과 같은 것을 원한다. 이것은 정규식입니다. Java를 원하면 \\b[^\\s]+f[^\\s]+a[^\\s]+e[^\\s]+n[^\\s]\b을 사용해야합니다.

이것은 완벽하지는 않지만 사용자가 제안한 상황을 처리한다는 점에 유의하십시오.

1

처음에는 끔찍한 생각입니다. 사용자는 필터를 피하기 위해 "f-aeen"과 같은 것을 작성하지만 "ffaen"또는 "-faen"또는 준비하지 않은 모든 변형이 나타나지 않을 것이라고 생각하십니까? 이것은 당신이 이길 수없는 경주이며, 진정한 패자는 유용성입니다.

+1

나는 프로 *! # ity 필터가 매우라고 생각합니다! % "@ 아이디어. 그들은 $에서 우릴 보호하는데 도움이됩니까? 음란물로 가득 찬 격렬한 코멘트 – Alderath

+0

잘하셨습니다. –

관련 문제