如何匹配不在段落末尾的句点?

tem*_*ame 3 regex

如果我想找到段落末尾的所有句号,我可以这样做\.($|\n).但是,我怎么能否定这一点并说"任何一个不是其中一个字符的句点,因为元字符在字符类中不起作用,这会阻止我使用否定字符类?

zx8*_*x81 5

什么在$?这取决于!

答案很大程度上取决于您使用的语言和正则表达式引擎.你看,

  1. 在Java中,$断言我们位于字符串的末尾或者在字符串末尾的任何回车符或换行符之前.所以你一定要安全\.(?!$)
  2. 在PCRE,C#和Python中,$断言我们位于字符串的末尾或字符串末尾的任何换行符之前.所以你可以用一个\.(?!$|\r)
  3. 在JavaScript和Ruby中,$断言我们位于字符串的末尾.所以你需要用一个完整的Monty \.(?!$|[\r\n]).

因此,对于多引擎解决方案,最安全的是:

\.(?!$|[\r\n])
Run Code Online (Sandbox Code Playgroud)

但在正确的背景下,其他两个选项是完全可以接受的.

说明

  • \. 匹配文字时期
  • 负向前瞻(?!$|[\r\n])断言,后面的内容既不是"字符串的结尾",也不是回车也不是新行.