2016-03-27 8 views
0

Ich kann keine Lösung dafür finden. Bitte helfen Sie. Ich brauche diesen "Absatz" in Sätzen Array aufgeteilt:PHP + Split-Absatz in Array

$ Absatz =; "a b c hallo O.C .. hallo Welt -in .. Hallo Welt 8,5 Hallo Welt......"

sollte Das resultierende Array wie folgt aussehen:

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

ich diese weit

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

Aber dies ist nicht eine Dezimalzahl ermöglichen.

+2

Warum 'Hölle o.c.'? Ihr Code funktioniert so, wie ich es erwarten würde, https://eval.in/542844, vielleicht Tippfehler bei der Eingabevariable? '$ sentence' anstatt' $ paragraph' ... oder vielleicht versuchen Sie etwas anderes? – chris85

+0

o.c. und in. sind 2 Abkürzungen, die in unserem Geschäft verwendet werden, dass ich nicht zulassen kann, dass eine Aufteilung auftritt. –

+0

Wie funktioniert dein aktueller Code nicht und warum "hell o.c." und nicht "hello oc."? Vielleicht müssen Sie einen längeren Beispielstring angeben, wenn das Problem besser sichtbar ist? – chris85

Antwort

0

Sie können (*SKIP)(*FAIL) verwenden, um der Regex zu sagen, dass sie nicht übereinstimmt, wenn die vorhergehende Übereinstimmung übereinstimmt. So

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

Sollte die Regex sagen nicht übereinstimmen, wenn in. oder o.c. abgestimmt ist. Ansonsten auf ., ! oder ? aufgeteilt und ein Leerzeichen.

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