段落以大写字母开头,以标点符号结束

时间:2018-11-08 10:18:32

标签: regex

我要确保用户以大写字母开头的段落,并以标点符号(。!?“)结尾。该段落可以包含多个句子。

类似地,我想选择确保结尾处没有标点符号的选项-这是针对其他区域的。

我已经可以对一个句号进行句号了,但是对于多个句子并没有通过:

^[A-Z][^\.]*\.$

示例段落:

  

这是一个测试!我想确保第一个字符是   大写字母,最后一个是标点符号,介于两者之间。

有什么想法吗?我是regex的新手,感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用

^[A-Z][\s\S]*?[.!?](?:\n\n|\z)

请参见regex demo。确保已启用多行选项,以便^可以匹配行的起始位置。

如果换行符是CRLF,请使用\r\n而不是\n,或者如果正则表达式支持\R,请使用\R

详细信息

  • ^-一行的开头
  • [A-Z]-大写字母
  • [\s\S]*?-任意0个以上的字符,尽可能少
  • [.!?]-最后的标点符号.?!
  • (?:\n\n|\z)-双换行符或字符串结尾。

PHP正则表达式变体:

'~^[A-Z].*?[.!?](?:\n\n|\z)~sm'

或支持Unicode的Unicode:

'~^\p{Lu}.*?[.!?](?:\R\R|\z)~smu'