2013-05-25 2 views
0

내 프로젝트의 경우 여러 문장을 분석하고 어떤 문장이 물음표로 끝났는지 여부를 결정하여 질문을 해결해야했습니다.PHP가 구분 기호를 유지하면서 문자열 분해

그래서 폭발을 사용하여 시도했지만 여러 구분 기호를 지원하지 않았습니다. 나는 일시적으로 모든 구두점을 chr (1)로 바꿨으므로 모든 문장을 끝낼지라도 (.,!,?, 등 ...) 모든 문장을 폭발시킬 수있었습니다.

그렇다면 각 문장의 마지막 글자를 찾아야했지만 폭발 기능으로 모든 구두점이 제거되었으므로 거기에 다시 넣을 방법이 필요했습니다.

문제를 해결하는 데 오랜 시간이 걸렸지 만 결국에는 문제가 발생했습니다. 다른 사람들이 사용할 수 있도록 여기에 내 솔루션을 게시하고 있습니다.

답변

4

내 함수는 multipleExplodeKeepDelimiters입니다. 그리고는 마지막 문자가 물음표 경우 다른 문장에 캐릭터를 폭발 및보고에 의해, 사용 방법의 예 :

function multipleExplodeKeepDelimiters($delimiters, $string) { 
    $initialArray = explode(chr(1), str_replace($delimiters, chr(1), $string)); 
    $finalArray = array(); 
    foreach($initialArray as $item) { 
     if(strlen($item) > 0) array_push($finalArray, $item . $string[strpos($string, $item) + strlen($item)]); 
    } 
    return $finalArray; 
} 

$punctuation = array(".", ";", ":", "?", "!"); 
$string = "I am not a question. How was your day? Sex On Hard Concrete Always Hurts The Orgasmic Area. Why does custard taste so lumpy when you use breast milk?"; 

$sentences = multipleExplodeKeepDelimiters($punctuation, $string); 
foreach($sentences as $question) { 
    if($question[strlen($question)-1] == "?") { 
     print("'" . $question . "' is a question<br />"); 
    } 
} 
+14

내가 말을해야, 이상한 예를 들어 문자열 I이어야한다 이제까지 보았습니다. –

+0

나는 지금까지 본 SOH CAH TOA를 기억하는 가장 좋은 방법! – IanS

6
$array = preg_split('~([.!?:;])~u',$raw , null, PREG_SPLIT_DELIM_CAPTURE); 
+0

Eww, 정규식 지저분합니다. – CHRIS

+6

깔끔하고 빠른 답변. –

관련 문제