正则表达式 - 匹配最接近文字文本

时间:2015-05-16 01:25:34

标签: regex

如何在文字文本的最近一段时间停下来获取"这里的最后一句"?我目前的正则表达式最终得到了#34;中句。最后一句在这里"

我的正则表达式

\.(.+?ntence is he.+?)\.

示例文本

first sentence. middle sentence. last sentence is here. or is it?

3 个答案:

答案 0 :(得分:3)

请确保不允许任何期间漏洞:

\.([^.]+?ntence is he[^.]+?)\.

演示:https://regex101.com/r/qH4xB7/1

答案 1 :(得分:3)

问题在于你的RegEx并不像你想象的那样非贪婪。

  1. 首先,您的RegEx会找到您的短语的第一个句号。
  2. 然后匹配下面的所有内容,直到短语" ntence是他"。
  3. 最后,它会匹配到下一个句号之后的所有内容。
  4. 您应该使用否定的字符类而不是句点来解决此问题,例如:

    \.([^.]+?ntence is he[^.]+?)\.
    

答案 2 :(得分:1)

要获得最后一句话(定义为以句号结尾但不包含句号),如果不关心句子的内容,请尝试:

/\s*([^.]+\.)[^.]*$/

此处的示例详细说明:https://regex101.com/r/jA3mC1/1

这是“PCRE”(Perl兼容的正则表达式) - 所有“RegEx”都不一样。我假设你的意思是PCRE,但是,你应该编辑你的标签并包括[pcre]或你正在使用的任何正则表达方言。