2011-08-23 5 views
1

등의 문자지도를 검색 할 수 PHP에서 방법이 있나요 나는소문자 및 대문자를 검색 하시겠습니까?

Firstname LastnameFirstname Lastname

같은이 문자열을하고 난

Firstname Lastname, Firstname Lastname

에 그것을 변환 할?

+4

'Rachel McAdams'는 'Rachel Mc, Adams'가되어야하나요? –

+3

누군가 McDonald와 같은 성을 가진다면 어떨까요? –

+0

정확히 무엇을하려고합니까? 더 많은/좋은 예를 들어주세요. – Crack

답변

5

간단한/naiive 방법 :

$string = preg_replace('/([a-z])([A-Z])/', "$1, $2", $string); 

하지만 위 내 댓글에 넣어, 그 Rachel Mc, AdamsRachel McAdams을 설정합니다.

+1

당신이 원하는 경우 예외를 추가 할 수 있습니다 :'/ ([az]) (? Paulpro

+0

또는 jlis 솔루션을 다음과 같이 사용하십시오 :''/\ w * ([az]) ([AZ]) /''\ w *'는 욕심이 많기 때문에 작동합니다. Rachel McAdams가 문자열의 마지막 이름이 아닌 한 – Paulpro

0

대문자 또는 소문자를 감지하는 것은 그렇게 어렵지 않습니다. PHP는 내장 기능이 없습니다하지만 당신은 할 수 있습니다 그리고

$ord = ord($string[$pos]); 
$is_uppercase = $ord <= 90 && $ord >= 65; 

당신이 할 수있는 문자를 통해 루프와 당신이 가능하게 정말로 '짧은'쌍을 건너 뛰는 발견,하지만 그건 추측 일이 될 것하는 쌍 참조 . 인간 이름에는 형식이 없으므로이 작업을 수행 할 수있는 완벽한 방법은 없습니다.

1
<?php 
$str = 'Firstname LastnameFirstname Lastname'; // Set our string 
$str = preg_replace('/(\w+ \w+[a-z])([A-Z]\w+ \w+)/', '$1, $2', $str); // Find name boundries and insert comman 
echo $str; // Firstname Lastname, Firstname Lastname 
?> 
+0

'preg_replace_all'로 변환하면 작동하지 않습니다. 문자열에 두 개 이상의 이름이 있으면 다른 모든 이름과 만 일치합니다. – Paulpro

+0

필자는 예를 들어 두 개의 이름 만 구문 분석하는 예제를 기반으로 b/c를 고려하지 않았지만 매우 좋은 지적입니다. –

0

약간 복잡하지만 일이 먼저 교체 다른 단어와 결합 대문자로 문자열을 대문자로 문자열을 두 번째 검색을

$word = "Firstname LastnameFirstname Lastname"; 
$word = str_replace('_', ' ', str_replace('_xx', ', ', strtolower(preg_replace('/[^A-Z^a-z^0-9]+/','_', 
     preg_replace('/([a-z\d])([A-Z])/','\1_xx\2', 
     preg_replace('/([A-Z]+)([A-Z][a-z])/','\1_\2',$word)))))); 
echo $word; 

첫 preg_replace이다 검색을 수행하는 쉼표로 우리 _xx을 대체하는 데 도움이 더하기 공간 두 번째는 밑줄을 공백으로 대체합니다.