2010-08-06 4 views
1

두 단어가 비슷하게 결합되어 있습니다. KitnerCoster 중간에 공백을 추가하고 싶습니다. 두 단어가 대문자로 나뉘어져 있고 유일한 차이점이 있다면 어떤 종류의 속임수라도 알 수 있습니다. 내 첫 번째 재판이 정규 표현식을 작성하는 그러나 당신이두 개의 캡쳐 된 단어 사이에 공백을 삽입 하시겠습니까?

s/([a-z])([A-Z])/'$1 $2'/g 

같은 것을 할 수있는 정규 표현식을 사용

답변

3

첫 단어가 대문자이면 신경 써야합니까? 그렇지 않다면, 당신은 내가 단지 all Unicode characters 일치하는 ASCII 문자와 사람에 맞는 버전을 준

// ASCII 
preg_replace('/\b([A-Z]\S*[a-z])([A-Z])/', '$1 $2', $string) 
preg_replace('/\b([[:upper:]]\S*[[:lower:]])([[:upper:]])/', '$1 $2', $string) 

// Unicode (UTF-8) 
preg_replace('/\b(\p{Lu}\S*\p{Ll})(\p{Lu})/u', '$1 $2', $string) 

다음 수행 관리를 수행하고 혼자 kitnerCostnerKitnerCostner를 해결하지만, 남겨 둡니다

// ASCII 
preg_replace('/([a-z])([A-Z])/', '$1 $2', $string) 
preg_replace('/([[:lower:]])([[:upper:]])/', '$1 $2', $string) 

// Unicode (UTF-8) 
preg_replace('/(\p{Ll})(\p{Lu})/u', '$1 $2', $string) 

을 . 유니 코드는 PHP 5.1.0에서 사용할 수 있습니다.

4

보통 그래서 당신은 하나 또는 다른 부분을 수정해야 할 수도 실패합니다.

어떻게 1 문자 길이의 단어를 처리 하시겠습니까? FooXBar에서 'X'처럼? X는 위의 정규식에 의해 별도의 단어로 인식되지 않습니다.

+0

+1 왜냐하면 나는 첫 번째 시험에서 작동하는 정규식을 너무나 많이 쓰고 있기 때문입니다. –

+0

preg_compatible regex로 바꾸십시오. (해결책은 괜찮지 만, PHP에 관한 질문은 : preg_replace ('/ ([az]) /', '$ 1 $ 2', $ string);'. .. – ircmaxell