0

我想添加一个函数来返回我最后一个问题的第一个字母是否是大写字母。

这是代码:

<?php

function isCapital($string) {
   return $string = preg_match('/[A-Z]$/',$string{0});
}

$text = " Poetry. do you read poetry while flying? Many people find it relaxing to read on long flights. Poetry can be divided into several genres, or categories. ";
$sentences = explode(".", $text); $save = array();
foreach ($sentences as $sentence) {
   if (count(preg_split('/\s+/', $sentence)) > 6) {
      $save[] = $sentence. ".";
   }
}

if( count( $save) > 0) {
   foreach ($save as $nama){
      if (isCapital($nama)){
         print_r ($nama);
      }
   }
}
?>

结果应该是...

诗歌可以分为几个体裁或类别。

...但它什么也没打印。我只需要包含超过 6 个单词并以大写字母开头的句子。

4

2 回答 2

4

当您执行explode() 函数时,您会在字符串的开头留下一个空格,这意味着$string 的最左边的字符永远不会是大写字母——它将是一个空格。我会将 isCapital() 函数更改为以下内容:

function isCapital($string) {
  return preg_match('/^\\s*[A-Z]/', $string) > 0;
}
于 2012-07-02T03:15:33.770 回答
1

如果你愿意的话,你应该能够通过一个正则表达式来完成所有这些:

preg_match_all('/((?=[A-Z])([^\s.!?]+\s+){5,}[^\s.!?]+[.!?])/', $string, $matches);

http://refiddle.com/2hz

或者,从字符类中删除!and?以仅计.为句子分隔符。

于 2012-07-02T03:21:33.387 回答