2014-07-02 43 views
0

正则表达式对我来说是新的(但它们是美好而有用的:D)。但是,在尝试在TextMate中使用它们之后,我得到了意想不到的结果。我不确定这是一个错误还是正则表达式的工作原理。TextMate中的正则表达式问题

我有这样的代码

begin text in the middle end and more text and a 
second begin second text in the middle end 

begin.+end搜索我希望两个结果

  1. begin text in the middle end
  2. begin second text in the middle end

但我得到的选择了整个文本;我期望begin.+end搜索.+,直到找到第一个end,但它搜索直到最后一个。

这是他们如何工作?我在哪里可以学习如何使用正则表达式?

事实是,我很感兴趣,只是选择内部.+没有beginend但这是另一个问题。

回答

1

使用下面的正则表达式来获得开始和结束之间的字符串,

(?<=begin).+?(?=end) 

DEMO

说明:

  • (?<=begin)正向后看使用后搭配具体模式。在这个例子中,正则表达式引擎在刚刚开始之后设置匹配标记。
  • .+?匹配一个或多个字符。 ?使正则表达式非贪婪,因此它会导致最短匹配。
  • (?=end)一旦发现字符串end,正则表达式引擎停止匹配。因此给你开始和结束之间的字符。
+0

关键是'。+?';)剩下的就是我需要学习的东西。 – Manuel

+0

@Manuel增加了exp为'。+?' –

+0

在本演示中添加和删除'?'可以看出区别http://regex101.com/r/oX4qT1/3 –