Regex 获取前后的句点和单词(具有重叠匹配)

Regex 获取前后的句点和单词(具有重叠匹配),regex,Regex,我想在一些文本中获得所有句点和周围的单词。下面的文本可以是一个示例: 本研究旨在设计以丁香叶油丁香酚为原料生产异丁香酚和香兰素的工艺,并分析其潜在的产品开发潜力。本研究工作的具体目标是:1。鉴别异丁香酚和香兰素。2.异丁香酚和香兰素工艺设计的模型模拟。3.财务可行性和附加值研究。本研究有望为丁香酚提供最大的经济潜力,以提高丁香叶油的附加值。结果表明,FTIR和NMR产物证实合成产物中存在的异丁香酚和香兰素与参考标准完全相同 当我使用该模式时 \w+\.\s\w+ 在上面的字符串上,它匹配(来自

我想在一些文本中获得所有句点和周围的单词。下面的文本可以是一个示例:

本研究旨在设计以丁香叶油丁香酚为原料生产异丁香酚和香兰素的工艺,并分析其潜在的产品开发潜力。本研究工作的具体目标是:1。鉴别异丁香酚和香兰素。2.异丁香酚和香兰素工艺设计的模型模拟。3.财务可行性和附加值研究。本研究有望为丁香酚提供最大的经济潜力,以提高丁香叶油的附加值。结果表明,FTIR和NMR产物证实合成产物中存在的异丁香酚和香兰素与参考标准完全相同

当我使用该模式时

\w+\.\s\w+
在上面的字符串上,它匹配(来自
和香兰素部分。2.模型模拟
香兰素。2但它跳过了2。型号

我希望它和香兰素都匹配。2
2。型号

你能给我一些改进,让我得到所有的周期吗?

将a与a一起使用:

按如下方式使用:

preg_match_all('/(?=(\b\w+\.(?:\s+\w+|$)))/', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[1];
说明:

(?=       # Assert that the following can be matched at the current position:
 (        # Capture into group number 1:
  \b      # - Beginning of a word
  \w+     # - an alphanumeric word
  \.      # - a dot
  (?:     # - Then either...
   \s+\w+ #   - whitespace and another word
  |       # - or... 
   $      #   - the end of the string.
  )       # End of alternation
 )        # End of capturing group 1
)         # End of lookahead

.

是否也要匹配
标准。
在字符串末尾?我不需要它。字符串末尾的句点很容易识别。好的,但是如果正则表达式也捕捉到它,它不会有什么坏处。你试过我的解决办法吗?是的,我试过了。它不起作用。在我通常使用的正则表达式工具中都没有。你有其他的解决方案吗?我在回答中链接到的正则表达式工具使用PHP,所以它可以工作。您使用它是否与我的代码示例中完全相同?重要的是,不要查看匹配结果本身(总是空字符串),而要查看第一次捕获组的内容。
(?=       # Assert that the following can be matched at the current position:
 (        # Capture into group number 1:
  \b      # - Beginning of a word
  \w+     # - an alphanumeric word
  \.      # - a dot
  (?:     # - Then either...
   \s+\w+ #   - whitespace and another word
  |       # - or... 
   $      #   - the end of the string.
  )       # End of alternation
 )        # End of capturing group 1
)         # End of lookahead