2011-02-28 6 views
-1

어떻게 대문자, 숫자, 특수 문자 또는 첫 글자는 대문자이지만 3 글자를 초과하지 않는 단어는 preg_replace와 함께 두어야합니다.PHP preg_replace() 단어 만 대문자로 남겨 둡니다.

Portocjnk Karaer HDS-C 7/11, 9/15, =>HDS-C 7/11, 9/15, 8/15 ~ 8/15 E 예 :

E

KARCHER KARCHER B 140 R Bp에 = "B 140 R Bp에

KARCHER KARCHER B 140 R BSP TRR = "B 140 R BSP TRR

Tatata Tatat 야드 맨 YM 84 MW 31AY97KV643 ="YM 84 MW 31AY97KV643

(Tatata) (Tatat) Yard-Man YM 84 MW 31AY97KV643 =>YM 84 MW 31AY97KV643

미리 감사드립니다.

+0

'Karcher B'의 'B'는 단순히 누군가의 초기가 아닌 '보관해야합니다'의 일부라고 어떻게 말할 수 있습니까? –

+0

소문자가 없으면 추측합니다. – DreifGenov

+0

나는 이것이 충분히 복잡한 문제라고 생각한다.'preg_' * 함수를 사용하기보다는 스스로 파싱해야한다. 이 일을 끝내면'preg_replace'가 아니라'preg_match_all'을 원합니다. 'preg_replace'는 주어진 정규식을 취하여 일치하는 것을 제거합니다. 당신은 당신이 원하는 것을 시작하고 있습니다. 따라서 대체보다는 일치를 사용해야합니다. –

답변

1
preg_replace('|\b([A-Z][a-z][a-z][a-z][a-z\-]*)\b|','',$text); 

이 하나 이것은 단순한 화이트리스트 방식이 될 것입니다 귀하의 예를

+0

고마워요! 그것은 약간의 조정으로 나를 위해 일했습니다. – DreifGenov

0

의 대부분과 함께 작동합니다. preg_replacing 대신 원하는 부분을 먼저 추출합니다. 그리고 $ 결과 배열을 다시 만들어야합니다.

preg_match_all('#\b[A-Z\d][A-Z\d/,-]*\b|\b(?<!-)[A-Z][a-z]{1,2}\b#', $str, $result); 
$result = implode(" ", $result[0]); 

두 번째 [...] 문자 클래스에 "특수 문자"를 더 추가해야 할 수 있습니다.

https://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world에서 정규 표현식 디자인에 도움이되는 유용한 도구를 확인하십시오.

+0

고마워요! Tralala kulala "MTD"E740 F => MTD E740 F "이지만, MTD"Eral "는 MT2"E740 F => "MTD"E740 F "이어야합니다. – DreifGenov