<?php
function sentence_split($text) {
$before_regexes = array('/(?:(?:[\'\"„][\.!?…][\'\"”]\s)|(?:[^\.]\s[A-Z]\.\s)|(?:\b(?:St|Gen|Hon|Vol|Prof|Dr|Mr|Ms|Mrs|[JS]r|Col|Maj|Brig|Sgt|Capt|Cmnd|Sen|Rev|Rep|Revd)\.\s)|(?:\b(?:St|Gen|Hon|Prof|Dr|Mr|Ms|Mrs|[JS]r|Col|Maj|Brig|Sgt|Capt|Cmnd|Sen|Rev|Rep|Revd)\.\s[A-Z]\.\s)|(?:\bApr\.\s)|(?:\bAug\.\s)|(?:\bBros\.\s)|(?:\bCo\.\s)|(?:\bCorp\.\s)|(?:\bDec\.\s)|(?:\bDist\.\s)|(?:\bFeb\.\s)|(?:\bInc\.\s)|(?:\bJan\.\s)|(?:\bJul\.\s)|(?:\bJun\.\s)|(?:\bMar\.\s)|(?:\bNov\.\s)|(?:\bOct\.\s)|(?:\bPh\.?D\.\s)|(?:\bSept?\.\s)|(?:\b\p{Lu}\.\p{Lu}\.\s)|(?:\b\p{Lu}\.\s\p{Lu}\.\s)|(?:\bcf\.\s)|(?:\be\.g\.\s)|(?:\besp\.\s)|(?:\bet\b\s\bal\.\s)|(?:\bvs\.\s)|(?:\p{Ps}[!?]+\p{Pe} ))\Z/mu', '/(?:(?:[\.\s]\p{L}{1,2}\.\s))\Z/mu',
'/(?:(?:[\[\(]*\.\.\.[\]\)]* ))\Z/mu',
'/(?:(?:\b(?:pp|[Vv]iz|i\.?\s*e|[Vvol]|[Rr]col|maj|Lt|[Ff]ig|[Ff]igs|[Vv]iz|[Vv]ols|[Aa]pprox|[Ii]ncl|Pres|[Dd]ept|min|max|[Gg]ovt|lb|ft|c\.?\s*f|vs)\.\s))\Z/mu',
'/(?:(?:\b[Ee]tc\.\s))\Z/mu',
'/(?:(?:[\.!?…]+\p{Pe} )|(?:[\[\(]*…[\]\)]* ))\Z/mu',
'/(?:(?:\b\p{L}\.))\Z/mu',
'/(?:(?:\b\p{L}\.\s))\Z/mu',
'/(?:(?:\b[Ff]igs?\.\s)|(?:\b[nN]o\.\s))\Z/mu',
'/(?:(?:[\"”\']\s*))\Z/mu',
'/(?:(?:[\.!?…][\x{00BB}\x{2019}\x{201D}\x{203A}\"\'\p{Pe}\x{0002}]*\s)|(?:\r?\n))\Z/mu',
'/(?:(?:[\.!?…][\'\"\x{00BB}\x{2019}\x{201D}\x{203A}\p{Pe}\x{0002}]*))\Z/mu',
'/(?:(?:\s\p{L}[\.!?…]\s))\Z/mu');
$after_regexes = array('/\A(?:)/mu', '/\A(?:[\p{N}\p{Ll}])/mu',
'/\A(?:[^\p{Lu}])/mu',
'/\A(?:[^\p{Lu}]|I)/mu',
'/\A(?:[^p{Lu}])/mu',
'/\A(?:\p{Ll})/mu',
'/\A(?:\p{L}\.)/mu',
'/\A(?:\p{L}\.\s)/mu',
'/\A(?:\p{N})/mu',
'/\A(?:\s*\p{Ll})/mu',
'/\A(?:)/mu',
'/\A(?:\p{Lu}[^\p{Lu}])/mu',
'/\A(?:\p{Lu}\p{Ll})/mu');
$is_sentence_boundary = array(false, false, false, false, false, false, false, false, false, false, true, true, true); $count = 13;
$sentence = '';
$before = '';
$after = substr($text, 0, 10);
while($text != '') {
for($i = 0; $i < $count; $i++) {
if($is_sentence_boundary[$i]) {
$sentence = '';
}
break;
}
}
$first_from_text = $text[0];
$first_from_after = $after[0];
$before .= $first_from_after;
$sentence .= $first_from_after;
$after .= $first_from_text;
}
if($sentence != '' && $after != '') {
}
return $sentences;
}
$text = "Entertainment media properties. Fairy Tail and Tokyo Ghoul.";
PD9waHAKCmZ1bmN0aW9uIHNlbnRlbmNlX3NwbGl0KCR0ZXh0KSB7CiAgICAkYmVmb3JlX3JlZ2V4ZXMgPSBhcnJheSgnLyg/Oig/OltcJ1wi4oCeXVtcLiE/4oCmXVtcJ1wi4oCdXVxzKXwoPzpbXlwuXVxzW0EtWl1cLlxzKXwoPzpcYig/OlN0fEdlbnxIb258Vm9sfFByb2Z8RHJ8TXJ8TXN8TXJzfFtKU11yfENvbHxNYWp8QnJpZ3xTZ3R8Q2FwdHxDbW5kfFNlbnxSZXZ8UmVwfFJldmQpXC5ccyl8KD86XGIoPzpTdHxHZW58SG9ufFByb2Z8RHJ8TXJ8TXN8TXJzfFtKU11yfENvbHxNYWp8QnJpZ3xTZ3R8Q2FwdHxDbW5kfFNlbnxSZXZ8UmVwfFJldmQpXC5cc1tBLVpdXC5ccyl8KD86XGJBcHJcLlxzKXwoPzpcYkF1Z1wuXHMpfCg/OlxiQnJvc1wuXHMpfCg/OlxiQ29cLlxzKXwoPzpcYkNvcnBcLlxzKXwoPzpcYkRlY1wuXHMpfCg/OlxiRGlzdFwuXHMpfCg/OlxiRmViXC5ccyl8KD86XGJJbmNcLlxzKXwoPzpcYkphblwuXHMpfCg/OlxiSnVsXC5ccyl8KD86XGJKdW5cLlxzKXwoPzpcYk1hclwuXHMpfCg/OlxiTm92XC5ccyl8KD86XGJPY3RcLlxzKXwoPzpcYlBoXC4/RFwuXHMpfCg/OlxiU2VwdD9cLlxzKXwoPzpcYlxwe0x1fVwuXHB7THV9XC5ccyl8KD86XGJccHtMdX1cLlxzXHB7THV9XC5ccyl8KD86XGJjZlwuXHMpfCg/OlxiZVwuZ1wuXHMpfCg/OlxiZXNwXC5ccyl8KD86XGJldFxiXHNcYmFsXC5ccyl8KD86XGJ2c1wuXHMpfCg/Olxwe1BzfVshP10rXHB7UGV9ICkpXFovbXUnLAogICAgICAgICcvKD86KD86W1wuXHNdXHB7TH17MSwyfVwuXHMpKVxaL211JywKICAgICAgICAnLyg/Oig/OltcW1woXSpcLlwuXC5bXF1cKV0qICkpXFovbXUnLAogICAgICAgICcvKD86KD86XGIoPzpwcHxbVnZdaXp8aVwuP1xzKmV8W1Z2b2xdfFtScl1jb2x8bWFqfEx0fFtGZl1pZ3xbRmZdaWdzfFtWdl1penxbVnZdb2xzfFtBYV1wcHJveHxbSWldbmNsfFByZXN8W0RkXWVwdHxtaW58bWF4fFtHZ11vdnR8bGJ8ZnR8Y1wuP1xzKmZ8dnMpXC5ccykpXFovbXUnLAogICAgICAgICcvKD86KD86XGJbRWVddGNcLlxzKSlcWi9tdScsCiAgICAgICAgJy8oPzooPzpbXC4hP+KApl0rXHB7UGV9ICl8KD86W1xbXChdKuKApltcXVwpXSogKSlcWi9tdScsCiAgICAgICAgJy8oPzooPzpcYlxwe0x9XC4pKVxaL211JywKICAgICAgICAnLyg/Oig/OlxiXHB7TH1cLlxzKSlcWi9tdScsCiAgICAgICAgJy8oPzooPzpcYltGZl1pZ3M/XC5ccyl8KD86XGJbbk5db1wuXHMpKVxaL211JywKICAgICAgICAnLyg/Oig/OltcIuKAnVwnXVxzKikpXFovbXUnLAogICAgICAgICcvKD86KD86W1wuIT/igKZdW1x4ezAwQkJ9XHh7MjAxOX1ceHsyMDFEfVx4ezIwM0F9XCJcJ1xwe1BlfVx4ezAwMDJ9XSpccyl8KD86XHI/XG4pKVxaL211JywKICAgICAgICAnLyg/Oig/OltcLiE/4oCmXVtcJ1wiXHh7MDBCQn1ceHsyMDE5fVx4ezIwMUR9XHh7MjAzQX1ccHtQZX1ceHswMDAyfV0qKSlcWi9tdScsCiAgICAgICAgJy8oPzooPzpcc1xwe0x9W1wuIT/igKZdXHMpKVxaL211Jyk7CiAgICAkYWZ0ZXJfcmVnZXhlcyA9IGFycmF5KCcvXEEoPzopL211JywKICAgICAgICAnL1xBKD86W1xwe059XHB7TGx9XSkvbXUnLAogICAgICAgICcvXEEoPzpbXlxwe0x1fV0pL211JywKICAgICAgICAnL1xBKD86W15ccHtMdX1dfEkpL211JywKICAgICAgICAnL1xBKD86W15we0x1fV0pL211JywKICAgICAgICAnL1xBKD86XHB7TGx9KS9tdScsCiAgICAgICAgJy9cQSg/Olxwe0x9XC4pL211JywKICAgICAgICAnL1xBKD86XHB7TH1cLlxzKS9tdScsCiAgICAgICAgJy9cQSg/Olxwe059KS9tdScsCiAgICAgICAgJy9cQSg/OlxzKlxwe0xsfSkvbXUnLAogICAgICAgICcvXEEoPzopL211JywKICAgICAgICAnL1xBKD86XHB7THV9W15ccHtMdX1dKS9tdScsCiAgICAgICAgJy9cQSg/Olxwe0x1fVxwe0xsfSkvbXUnKTsKICAgICRpc19zZW50ZW5jZV9ib3VuZGFyeSA9IGFycmF5KGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlKTsKICAgICRjb3VudCA9IDEzOwoKICAgICRzZW50ZW5jZXMgPSBhcnJheSgpOwogICAgJHNlbnRlbmNlID0gJyc7CiAgICAkYmVmb3JlID0gJyc7CiAgICAkYWZ0ZXIgPSBzdWJzdHIoJHRleHQsIDAsIDEwKTsKICAgICR0ZXh0ID0gc3Vic3RyKCR0ZXh0LCAxMCk7CgogICAgd2hpbGUoJHRleHQgIT0gJycpIHsKICAgICAgICBmb3IoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykgewogICAgICAgICAgICBpZihwcmVnX21hdGNoKCRiZWZvcmVfcmVnZXhlc1skaV0sICRiZWZvcmUpICYmIHByZWdfbWF0Y2goJGFmdGVyX3JlZ2V4ZXNbJGldLCAkYWZ0ZXIpKSB7CiAgICAgICAgICAgICAgICBpZigkaXNfc2VudGVuY2VfYm91bmRhcnlbJGldKSB7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc2VudGVuY2VzLCAkc2VudGVuY2UpOwogICAgICAgICAgICAgICAgICAgICRzZW50ZW5jZSA9ICcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRmaXJzdF9mcm9tX3RleHQgPSAkdGV4dFswXTsKICAgICAgICAkdGV4dCA9IHN1YnN0cigkdGV4dCwgMSk7CiAgICAgICAgJGZpcnN0X2Zyb21fYWZ0ZXIgPSAkYWZ0ZXJbMF07CiAgICAgICAgJGFmdGVyID0gc3Vic3RyKCRhZnRlciwgMSk7CiAgICAgICAgJGJlZm9yZSAuPSAkZmlyc3RfZnJvbV9hZnRlcjsKICAgICAgICAkc2VudGVuY2UgLj0gJGZpcnN0X2Zyb21fYWZ0ZXI7CiAgICAgICAgJGFmdGVyIC49ICRmaXJzdF9mcm9tX3RleHQ7CiAgICB9CgogICAgaWYoJHNlbnRlbmNlICE9ICcnICYmICRhZnRlciAhPSAnJykgewogICAgICAgIGFycmF5X3B1c2goJHNlbnRlbmNlcywgJHNlbnRlbmNlLiRhZnRlcik7CiAgICB9CgogICAgcmV0dXJuICRzZW50ZW5jZXM7Cn0KCiR0ZXh0ID0gIkVudGVydGFpbm1lbnQgbWVkaWEgcHJvcGVydGllcy4mQWNpcmM7Jm5ic3A7IEZhaXJ5IFRhaWwgYW5kIFRva3lvIEdob3VsLiI7CnByaW50X3Ioc2VudGVuY2Vfc3BsaXQoJHRleHQpKTsKCgoK