我想检测句子结尾后的第一个字符是否为小写。
例如:
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
句子的结尾由以下字符定义:.!?
我可以用什么类型的正则表达式实现这一目标?
答案 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字符串。
$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>