2016-03-27 1 views
0

Je ne trouve aucune solution à cela. S'il vous plaît aider. J'ai besoin de partager ce "paragraphe" en phrases tableau:PHP + Diviser le paragraphe en tableau

$ paragraphe =; "a b c bonjour o.c .. bonjour monde -Dans .. bonjour monde 8.5 Bonjour tout le monde......"

Le tableau résultant devrait ressembler à:

0=>a. 
1=>b. 
2=>c. 
3=>hell o.c. 
4=>hello world -in. 
5=>hello. 
6=>world. 
7=>8.5 hello world. 

Je suis loin

preg_split('/(?<=[.?!;:])\s+/', $sentence, -1, PREG_SPLIT_NO_EMPTY); 

Mais cela ne permet pas un nombre décimal.

+2

Pourquoi 'l'enfer o.c.'? Votre code fonctionne comme je l'attend, https://eval.in/542844, peut-être typo sur la variable d'entrée? '$ sentence' au lieu de' $ paragraph' ... ou peut-être que vous essayez de faire autre chose? – chris85

+0

o.c. et en. 2 abréviations sont utilisées dans notre entreprise et je ne peux pas autoriser le fractionnement. –

+0

Comment votre code actuel ne fonctionne pas et pourquoi «hell o.c.» et pas «bonjour o.c.»? Peut-être que vous devez fournir une chaîne d'échantillons plus longue où le problème est plus visible? – chris85

Répondre

0

Vous pouvez utiliser (*SKIP)(*FAIL) pour indiquer à la regex de ne pas correspondre si la correspondance précédente correspond. Alors

(in|o\.c)\.\h+(*SKIP)(*FAIL)|(?<=[.?!])\s+ 

devrait dire au regex correspond pas si in. ou o.c. est adaptée. Sinon, scindez ., ! ou ? et un espace.

PHP Demo: https://eval.in/542856
Regex101 Démo: https://regex101.com/r/eS0tR7/1