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

あなたがそんなに傾いているなら、あなたは1つの正規表現を通してこれらすべてを達成することができるはずです:

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

http://refiddle.com/2hz

または、文字クラスから!とを削除して、文の区切り文字としてのみカウントします。?.

于 2012-07-02T03:21:33.387 に答える