2013-04-08 2 views
-2

내 목표는 검열하는 것입니다. 현재 atm에서는 message.replaceAll ("(? i) word", "replacement")를 사용하지만 분할되지 않은 단어 만 잡습니다."W o.R-d"에 regex 사용 .replaceAll ("word", "replacement")

이 사람들을 우회하려면 단순히 검열 된 단어 사이에 다른 문자를 추가하십시오.

그래서 "다른 사람은 Y.O.L.O을 원합니다"는 "yolo"를 찾고있는 동안 "다른 사람은 파티를하고 싶다"로 설정하고 싶습니다. '.'유지 거기에 보너스가있을 것입니다.

+2

질문을 올바르게 이해하지 못합니다. –

+2

이해할 수 없음 – Maroun

+1

정규 표현식을 사용하는 것은 아닙니다. 어떨까요 (Austin Powers에서 인용) 누군가 "Fook yu!"라고 씁니다. 모든 정규식은 쉽게 – Bohemian

답변

3

방법에 대해 : ("교체"와 "단어"를 대체 할)

msg.replaceAll("(?i)([^A-Za-z])w[^A-Za-z]?o[^A-Za-z]?r[^A-Za-z]?d([^A-Za-z])", 
       "$1replacement$2")); 

[^A-Za-z]
[^A-Za-z]?
$1이의 첫 번째 일 (선택 사항) 편지 아닌 편지 아니다 괄호 (첫 번째 ([^A-Za-z]))
$2은 괄호 안에 처음입니다 (마지막 ([^A-Za-z]))

0

msg.replaceAll("(?i)(?<=[^A-Za-z])w[^A-Za-z]?o[^A-Za-z]?r[^A-Za-z]?d(?=[^A-Za-z])", 
       "replacement")); 

위의 자동 주어진 단어를 생성하는 데 어렵지 않을 것이다 :

대안은 찾아 주위입니다.

이제 인터넷에 게시되어 모든 사람들이 그것을 볼 수 있으며 위의 스팸을받지 못하게 변경할 수 있습니다.

Reference.

편집 : 1word2는 건너 뛰므로 \\b (단어 경계)을 삭제했습니다.

+0

아, 그래서 그룹화 된 문자열을 먹일 방법이 없습니까? "yolo"대신 "y o " – libraryaddict

+0

@libraryaddict 나는 그것을 의심합니다. – Dukeling