2012-12-07 3 views
1

나는 나쁜 단어 목록 중 하나가 "S.A."입니다. 내 모든 단어가 배열에 저장되고 배열을 반복하고 대체합니다. 단어 S.A.는 내가 바꾸고 싶지 않은 것을 대체합니다. 나는 S.A를 단어 자체로 바꾸기 위해서만 필요합니다. 예 "이 S.A.는 좋지 않습니다." "이것은 나빴어"가되어야합니다. 하지만 이제는 그 문자열을 (예를 들어) SEAS가있는 문자열로 실행하면 바꿀 것입니다 ... 이유가 없습니다 ...PHP : regex가 이상한 결과를 대체합니다.

ps : if then string은 $ v 문자열이 정확하게 나쁜 단어, 그것은 제거되면 안된다. 정규 표현식의 \ b 단어 표시기로 단어를 정확하게 일치시켜야하지 않습니까?

추신 : 난 단지 전체 단어, 단어의하지 부분을 제거 할. 내가 사과를 가지고 있지만 누군가 사과를 썼다면 사과해서는 안됩니다. 내 정규식 패턴 잘못 무엇

foreach ($this->badwordArr as $badword) { 
    if (strtoupper($v) == strtoupper($badword)) { 

     // no replace because its the only word 
     $data[$key] = $v; 

    } else { 

     $pattern = "/\b$badword\b/i"; 
     $v = preg_replace($pattern, " ", $v); 
    }  
} 

?!?!

답변

5

도트는 모든 문자를 나타내는 정규식의 메타 문자입니다. 당신은 그것을 탈출해야합니다

S\.A\. 

는 전체 목록을 개정 방지하려면 사용할 수 있습니다

$badword_escaped = preg_quote($badword); 
$pattern = "/\b$badword_escaped\b/i"; 
+0

를 나는 이런 식으로 뭔가있을 거라 생각 했어요. 빠른 해결책을 가져 주셔서 감사합니다. – renevdkooi

관련 문제