2012-07-02 6 views
0

my last question에서 첫 글자가 대문자인지 아닌지를 반환하는 함수를 추가하고 싶습니다.첫 글자를 읽을 수 없습니다

<?php 

function isCapital($string) { 
    return $string = preg_match('/[A-Z]$/',$string{0}); 
} 

$text = " Poetry. do you read poetry while flying? Many people find it relaxing to read on long flights. Poetry can be divided into several genres, or categories. "; 
$sentences = explode(".", $text); $save = array(); 
foreach ($sentences as $sentence) { 
    if (count(preg_split('/\s+/', $sentence)) > 6) { 
     $save[] = $sentence. "."; 
    } 
} 

if(count($save) > 0) { 
    foreach ($save as $nama){ 
     if (isCapital($nama)){ 
     print_r ($nama); 
     } 
    } 
} 
?> 

결과는해야 ...

시 여러 장르 또는 범주로 나눌 수 있습니다 :

여기에 코드입니다.

...하지만 아무 것도 인쇄하지 않습니다. 나는 6 단어 이상으로 구성되고 대문자로 시작하는 문장 만 필요로한다.

+0

"왜 많은 사람들이 긴 비행편을 읽으려면 편한 걸 느낍니까?" 유효한 문장이 아닌가? –

+0

그는 물음표를 확인하지 않으므로 "비행하는 동안시를 읽나요? 많은 사람들이 긴 비행을 읽을 때 편안함을 느낍니다."라고 읽습니다. 대문자로 시작하지 않습니다. –

+0

그 점을 이해합니다.하지만 왜 질문 앞에 문장을 세고 싶지 않습니까? –

답변

4

explode() 함수를 사용하면 문자열의 시작 부분에 공백이 남습니다. 즉, $ string의 가장 왼쪽 문자는 대문자가 아니며 공백 문자가됩니다. 나는 다음에 isCapital() 함수를 바꿀 것 :

function isCapital($string) { 
    return preg_match('/^\\s*[A-Z]/', $string) > 0; 
} 
+1

그래도 인쇄 할 때 문장의 시작 부분에 공백이 남습니다. 그걸 없애기 위해서는 폭발 문 대신 다음과 같이 해보십시오 : '$ 문장 = preg_split ('/ \\. \\ s * /', $ text); ' –

+0

아, 작동합니다! 감사합니다. @ Skipus :) :) – bruine

+0

아, 그리고 원한다면 아마 조금 애호가를 얻을 수 있습니다. 미스터, 부인, 박사 같은 것들에 대한 정규 표현식의 가능성을 배제하고 싶을 수도 있습니다. 텍스트를 구문 분석하는 것은 실제로 의미 상 매우 어렵습니다. 다행스럽게도 나는 도울 수 있었고 행운을 빌어 요! –

1

당신이 그렇게 경사 있다면 당신은 하나의 정규 표현식을 통해이 모든 작업을 수행 할 수 있어야한다 :

preg_match_all('/((?=[A-Z])([^\s.!?]+\s+){5,}[^\s.!?]+[.!?])/', $string, $matches); 

http://refiddle.com/2hz

또는 문자 클래스에서 !?을 제거하여 문장 구분 기호로 . 만 계산하십시오.

+0

오, 그게 유용 할 것입니다, 난 그냥 정규식에 대해 배우기 시작했습니다, 정말 고마워! – bruine

+1

그들은 처음에는 힘들 수 있지만 꽤 강력합니다. http://www.regular-expressions.info/는 훌륭한 자료입니다. –

+0

오, 그건 내 학습 과정입니다. 나는 그것을 분명히 배울 것이다! 고맙습니다 ! :) – bruine

관련 문제