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, regex messy. – CHRIS

+6

Ницца намного чище и быстрее, чем принятый ответ. –

Смежные вопросы