我有一个Google的功能,可以在句子中清理我的段落。
我想修改此函数,以便将超过2个新行字符转换为换行符。否则它会转换空间中的所有新行字符。所以我会用段落格式。在这里,它将所有新行字符转换为空格。
正在转换成适当的句子。但是,如果我发现单个单词有第一个单词作为大写,那么我需要函数来忽略它。有时,如果有任何名词,它需要是资本。我们无法改变它的小案例。否则,如果是名词,并且除了第一个字符之外它有超过2个大写字符而不是将其转换为小写字母。
喜欢 - > Noun => Noun
但NoUn => noun
。我希望如果不是第一个字符是资本而不是将它转换为两个小写,那么它保持相同的格式。
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);
}
答案 0 :(得分:2)
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;
}
这将保留现有的专有名词大写,首字母缩写词和缩写词。
答案 1 :(得分:0)
这应该这样做:
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-Z#。如果要强制某种类型的行结尾或其间有多行,则可以使用之后要用于段落分隔符的任何内容。