2012-05-08 5 views
10

문장으로 단락을 폭발. 그러나 이것은 다른 문장 부호로 끝난 문장을 포함하지 않습니다! ? :;

단일 문자 대신 배열을 구분 기호로 사용하는 방법이 있습니까? 다른 구두점을 사용하여 분할하는 또 다른 깔끔한 방법이 있습니다.

나는 희망

explode(("." || "?" || "!"),$mystring) 

을 시도했지만 작동하지 않았다 ...

+0

사용 정규 표현식, – sree

+0

폭발하는 매개 변수로 그 변수를 전달 http://stackoverflow.com/questions/5032210/php-entent-boundaries-detection – Boby

답변

6

당신은 할 수 있습니다 :

preg_split('/\.|\?|!/',$mystring); 

또는 (더 간단하게) :

preg_split('/[.?!]/',$mystring); 
+1

이 방법은 최종 문자열에서 전체 중지 등을 제거합니다. – 472084

0

사용 preg_split하고 그것을 같은 정규 표현식을 제공 [\ |. \!]에 분할

0
$mylist = preg_split("/[\.|\?!:;]/", $mystring); 
0

폭발 할 때 여러 개의 구분 기호를 사용할 수 없습니다. 그것이 preg_split();을위한 것입니다. 그러나 그때조차도 구분 기호에서 폭발하므로 구두점없이 문장을 반환하게됩니다. 당신은 반환 된 배열에 문장과 다음 punctation 마크를 내파 일부 루프를 실행은 다음 PREG_SPLIT_DELIM_CAPTURE와 자신의 요소를 반환하고있는 멀리 단계와 플래그를 preg_split 취하거나 사용할 수 있습니다 preg_match_all(); :

preg_match_all('~.*?[?.!]~s', $string, $sentences); 
1
preg_split('/\s+|[.?!]/',$string); 

이메일 주소가 중간에 새 줄로 나눌 수 있기 때문에 가능한 문제 일 수 있습니다. 당신이 실제로 최종 결과와 구두점 표시를 원하는 가정

2

, 당신은 시도가 :

$mystring = str_replace("?","?---",str_replace(".",".---",str_replace("!","!---",$mystring))); 
$tmp = explode("---",$mystring); 

재치에 문장 부호를 떠날 것이다.

0

당신은

$sentences = preg_split("/[\.\?\!,;]+/", $mystring); 

preg_split가 구두점을 제거합니다이 유의하시기 바랍니다 시도 할 수 있습니다. 당신이 선행 또는 당신은 각 occurance 후 문자열을 분할하는 PCRE lookahead condition과 함께 preg_split()을 사용할 수 있습니다뿐만 아니라

$sentences = preg_split("/[\.\?\!,;]+\s+?/", $mystring); 
11

을 후행 공백 밖으로 제거하려는 경우 ., ;, :, ?, ! ..그대로 실제 문장 부호를 유지하면서 :

코드 :

$subject = 'abc sdfs. def ghi; this is [email protected]! asdasdasd? abc xyz'; 
// split on whitespace between sentences preceded by a punctuation mark 
$result = preg_split('/(?<=[.?!;:])\s+/', $subject, -1, PREG_SPLIT_NO_EMPTY); 
print_r($result); 

결과 : 패턴과 일치하고 변수에 값을 저장하는

Array 
(
    [0] => abc sdfs. 
    [1] => def ghi; 
    [2] => this is [email protected]! 
    [3] => asdasdasd? 
    [4] => abc xyz 
)