2015-01-12 8 views
1

PHP에서 구두점 주위에 공백이 뒤 따르는 문장 부호가 뒤 따르는 공백을 대체하려고합니다.PHP에서 구두점 주위의 공백을 바꿉니다.

예를 들어 "Hello , I am here ! Not anymore. .. ""Hello, I am here! Not anymore... "이되어야합니다. 나는 참조

PHP

$string = preg_replace('/\s*[[:punct:]]\s*/', '$2 ', $string); 

와 정규 표현식을 사용하기 위해 노력하고있어하지만 조각은 구두점을 제거합니다 "Hello I am here Not anymore"합니다.
내가 무엇이 누락 되었습니까?

답변

1

. 캡처 그룹 ()을 시도하고 그것을 $1 사용 .... . .을 대체하기 위해

$string = preg_replace('/\s*([[:punct:]])\s*/', '$1 ', $string); 
+0

이것은'를 대체하지 않습니다. . . '에 의해'. – Toto

1

이 당신을 위해 작동합니다 :

<?php 

    $string = "Hello , I am here ! Not anymore. .. "; 
    echo $string = preg_replace('/(\s*)([[:punct:]])(\s*)/', '$2 ', $string); 

?> 

출력 : 당신은 아무것도 포착하지 않는 한 다음 존재하지 않는 두 번째 캡처 그룹과 교체하려고

Hello, I am here! Not anymore. . . 
+0

이것은 '대체하지 않습니다. . . '에 의해'. – Toto

1

을,이게 내가 할 줄 것입니다 :

$string = "Hello , I am here ! Not anymore. . . "; 
$string = preg_replace('/\s+(?=\pP)|(?<=\pP\s)\s+/', '', $string); 
echo $string; 

출력 :

Hello, I am here! Not anymore... 

\pP은 구두점의 유니 코드 속성이며입니다..
(?=)은 앞으로 긍정적 인 모습입니다.
(?<=)은 긍정적 인 모습 인 see the doc입니다.

+0

흥미로운 고찰, 그것을 지적 해 주셔서 감사합니다. – Giorgio