2017-03-09 1 views
0

하자 내가이regex를 사용하여 PHP에서 반복되는 구두점을 바꾸는 방법은 무엇입니까?

Hello ??? WHERE ARE YOU!!!! Comon ?!?!?! 
desired outout 
Hello ? WHERE ARE YOU!!!! Comon ?! 

어떻게 이것을 달성 할 수있다,라고? 나는 preg_replace_callback을 시도했지만 운이 없었습니다. Finding the shortest repetitive pattern in a string을 시작점으로 사용했지만 문장 전체에서 작동합니다. 단어 단위로 작업하려면 + 중복 계산 (패턴) 만 제거해야합니다. Live Code

+1

원하는 출력이 "Hello? WHERE ARE YOU! Comon?!"이 아닌 이유는 무엇입니까? – erisco

+0

@erisco는 ~!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!가있는 텍스트를 정리해야합니다. , !!! !!! ??? !!! etc. –

답변

0

사용 :

$str = "Hello ??? WHERE ARE YOU!!!! Comon ?!?!?! ..."; 

$replacement = [ 
    '?', 
    '?!', 
    '.', 
]; 

foreach($replacement as $key => $value){ 
    $pattern[$key] = sprintf("/(\%s)+/", $value); 
} 

echo $outout = preg_replace($pattern, $replacement, $str); 

반복적 인 문장을 삭제 교체 배열에 구두점을 삽입합니다.

+0

구두점 [.!?] 묶음을 사용하여 반복적 인 패턴을 자동으로 찾을 수 있도록 개선 되었습니까? –

+1

코드가 업데이트되었습니다. 반복 기호를 삭제하려면 대체 기호에 추가하십시오. – MahdiY

+0

btw이 [질문]에서 물어 본 것처럼 반복적 인 패턴을 찾는 방법을 생각할 수 있습니까 (http://stackoverflow.com/questions/28963384/finding-the-shortest-repetitive-pattern-in-a-string) PHP로 적용할까요? 나는 시도했지만 실패했다. –

0

?!?\?+, !+!로, (\?!)+를 교체합니다. 코드 아래

function dedup_punctuation($str) { 
    $targets  = array('/\?+/', '/!+/', '/(\?!)+/'); 
    $replacements = array('?' , '!' , '?!'  ); 
    return preg_replace($targets, $replacements, $str); 
} 
+0

이것은 작동하지만 백 참조 등을 사용하여 반복적 인 패턴을 자동으로 찾는 방법이 있습니까? 이를 위해서는 모든 유스 케이스를 별도로 입력해야합니다. –

관련 문제