首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP句子案例函数

PHP句子案例函数
EN

Stack Overflow用户
提问于 2011-11-23 06:54:14
回答 3查看 5.1K关注 0票数 3

我有一个功能,从谷歌,以清理我的段落在句子的情况。

  1. 我想要修改这个函数,使它将超过2个新的行字符转换为换行符。否则,它将转换空间中的所有新行字符。所以我想要段落格式的。在这里,它将所有新行字符转换为空间。
  2. 在正确的句子里转换。但是,如果我发现一个单词有首字母作为大写,那么我需要函数来忽略这一点。有时,如果有任何名词,它需要的是大写。我们不能改变这个小案子。否则,如果名词和它有两个以上的大写字符,而不是第一个字符转换成小写。

像-> Noun => Noun但是NoUn => noun。意思是我想,如果不是第一个字符是大写,而是它转换它两个小写,否则它保持相同的格式。

代码语言:javascript
复制
function sentence_case($string) {
$sentences = preg_split('/([.?!]+)/', $string, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
$new_string = '';
foreach ($sentences as $key => $sentence) {
    $new_string .= ($key & 1) == 0?
        ucfirst(strtolower(trim($sentence))) :
        $sentence.' ';
}
$new_string = preg_replace("/\bi\b/", "I", $new_string);
//$new_string = preg_replace("/\bi\'\b/", "I'", $new_string);
$new_string = clean_spaces($new_string);
$new_string = m_r_e_s($new_string);
return trim($new_string);
}
EN

回答 3

Stack Overflow用户

发布于 2012-04-05 00:19:07

代码语言:javascript
复制
function sentence_case($str) {
   $cap = true;
   $ret='';
   for($x = 0; $x < strlen($str); $x++){
       $letter = substr($str, $x, 1);
       if($letter == "." || $letter == "!" || $letter == "?"){
           $cap = true;
       }elseif($letter != " " && $cap == true){
           $letter = strtoupper($letter);
           $cap = false;
       } 
       $ret .= $letter;
   }
   return $ret;
}

这将保留现有的专有名词大写、缩略语和缩写。

票数 2
EN

Stack Overflow用户

发布于 2011-12-02 12:26:11

这应该可以做到:

代码语言:javascript
复制
function sentence_case($string) {
// Protect the paragraphs and the caps
$parDelim = "/(\n+\r?)/";
$string = preg_replace($parDelim, "#PAR#", $string);
$string = preg_replace("/\b([A-Z])/", "#$1#", $string);

$sentences = preg_split('/([.?!]+)/', $string, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
$new_string = '';
foreach ($sentences as $key => $sentence) {
    $new_string .= ($key & 1) == 0?
        ucfirst(strtolower(trim($sentence))) :
        $sentence.' ';
}
$new_string = preg_replace("/\bi\b/", "I", $new_string);
//$new_string = preg_replace("/\bi\'\b/", "I'", $new_string);
$new_string = clean_spaces($new_string);
$new_string = m_r_e_s($new_string);

// Restore the paragraphs and the caps
$new_string = preg_replace("#PAR#", PHP_EOL, $new_string);
$new_string = preg_replace("/#([A-Z])#/", "$1", $new_string);
return trim($new_string);
}

它的工作方式是识别你想要保护的物品(第一段和第一帽),然后用一个字符串标记它,当你完成任务时,你可以把它替换回来。假设字符串中还没有#PAR#和#A#。之后,如果要强制使用某一类型的行结束或中间的几行,则可以在段落分隔符中使用任何您想要使用的内容。

票数 0
EN

Stack Overflow用户

发布于 2022-08-17 23:42:52

稍微修改了Sylverdrag的函数,我得到了一些对我很有用的东西。这个版本适用于我到目前为止抛出的每一句糟糕的句子:)

代码语言:javascript
复制
function sentence_case($string) {

$string = strtolower($string); // ADDED THIS LINE
    
// Protect the paragraphs and the caps
$parDelim = "/(\n+\r?)/";
$string = preg_replace($parDelim, "#PAR#", $string);
$string = preg_replace("/\b([A-Z])/", "#$1#", $string);

$sentences = preg_split('/([.?!]+)/', $string, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
$new_string = '';
foreach ($sentences as $key => $sentence) {
    $new_string .= ($key & 1) == 0?
        ucfirst(strtolower(trim($sentence))) :
        $sentence.' ';
}
$new_string = preg_replace("/\bi\b/", "I", $new_string);
// GOT RID OF THESE LINES
// $new_string = preg_replace("/\bi\'\b/", "I'", $new_string);
// $new_string = clean_spaces($new_string);
// $new_string = m_r_e_s($new_string);

// Restore the paragraphs and the caps
$new_string = preg_replace("#PAR#", PHP_EOL, $new_string);
$new_string = preg_replace("/#([A-Z])#/", "$1", $new_string);
$new_string = preg_replace("/#([A-Z])#/", "$1", $new_string);
preg_match('/#(.*?)#/', $new_string, $match); // MODIFIED THIS LINE TO USE (.*?)

return trim($new_string);
}
           
           
$string = "that IS it!! YOU and i are Totally DONE hanging out toGether... like FOREveR DUDE! i AM serious. a good FRIEND would NOT treAT me LIKE you dO. it Seems, howEVER, THAT you ARE not ONE of tHe GOOD ONEs.";
           
echo "<b>String 1:</b> " . $string . "<br><b>String 2:</b> " . sentence_case($string);

PHP沙箱

*))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8238314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档