正则表达式:检测句子结尾后的字符是否为小写

时间:2016-04-08 11:35:05

标签: php 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

句子的结尾由以下字符定义:.!?

我可以用什么类型的正则表达式实现这一目标?

2 个答案:

答案 0 :(得分:2)

要匹配这些句子标点符号的结尾,如果它们后跟空格和小写字母,请使用

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

请参阅regex demo

解释

  • \w+ - 1 +字母数字/下划线符号
  • [.?!]+ - 1 +文字.?!
  • \s+ - 1+空白符号......
  • (?=\p{Ll}) - 后跟1个空格字符,后跟小写字母(有关\p{Ll}详细信息和更多Unicode类别类别,请参阅Unicode character properties)。

在PHP中,使用/u修饰符,因为您使用的是Unicode字符串。

这是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 )

答案 1 :(得分:1)

您可以尝试使用类似的内容:[.!?]\s*[a-z](示例可用here)。

这将匹配英文字母的任何小写字母,该字母位于.!?字符之后,并且可选地为空格。< / p>