2016-04-08 14 views
-1

文末の後の最初の文字が小文字であるかどうかを検出したい。例えばregex:文の終わりの後の文字が小文字であるかどうかを検出する

Howdy world? lorem // match 
Howdy world... lorem // match 
Howdy world? lorem // match 
What is reality. howdy // match 
Howdy you. Lorem // no match 
Howdy you. 進撃の // no match 

文の終わりは、これらの文字によって定義されます。私はこれを達成するために使用できる正規表現の.!?

何種類?

+1

空白文字と小文字の後に続く場合は、文末の句読点の末尾に一致させますか? –

+0

はい、複数の空白にすることはできますが、私は上記の3番目の例と同様です。 –

答えて

2

それらは空白と小文字で続いている場合

'~\w+[.?!]+\s+(?=\p{Ll})~u' 

を使用して、文の句読点のこれらの端を一致させるためには、regex demo

説明参照してください:

  • \w+を - 1 +英数字/アンダースコア記号
  • [.?!]+ - 1+リテラル.?または!
  • \s+ - 1+空白記号...
  • (?=\p{Ll}) - 1+空白文字と続くが、小文字で続く(参照\p{Ll}詳細とより多くのUnicodeカテゴリクラスのUnicode character properties )。

PHPでは、Unicode文字列を使用しているため、/u修飾子を使用してください。ここで

PHP code demoです:

$re = '~\w+[.?!]+\s+(?=\p{Ll})~u'; 
$arr = array("Howdy world? lorem", "Howdy world... lorem", "Howdy world? lorem", "What is reality. howdy ", 
    "Howdy you. Lorem ", "Howdy you. 進撃の "); 
print_r(preg_grep($re, $arr)); 
// => Array([0] => Howdy world? lorem [1] => Howdy world... lorem 
//[2] => Howdy world? lorem [3] => What is reality. howdy) 
+0

これは私が探しているものです。残りの質問は1つだけです。一致するものが見つかると、その文の終わりの句読点(終端の句読点も含む)を強調表示することができますか?次の例を参照してください:https://regex101.com/r/gR5hB8/2 - 用語**世界**と**世界** ...などを強調表示する必要があります。 –

+2

おそらく[''〜\ w + [。?!](?= \ s + \ p {LI})〜u''](https://regex101.com/r/gR5hB8/3)。単語と最後の句読点の間に空白がある場合は、 '\ w *'の後に '\ s *'を追加してください。 –

+0

はい!正確には、文末に続く空白を追加することも可能です。明確にするために画像を参照してください:http://i.imgur.com/Zm6SPCE.jpg –

1

あなたがそうのようなものを使用して試みることができる:[.!?]\s*[a-z]here可能な例)。

これは.!、または?文字と、オプションの空白の後にある英語のアルファベットの任意の小文字と一致します。

関連する問題