Php 正则表达式查找问题

Php 正则表达式查找问题,php,python,regex,lookbehind,Php,Python,Regex,Lookbehind,我正试图编写一个正则表达式,从我正在构建的项目中保存的历史文件中提取文本块。目前,我正计划在我的文本编辑器textmate或SublimiteText 2中手动执行此提取,但最终我将使用python或php将其构建到一个脚本化流程中,目前尚未决定 “我的历史记录”文件中的所有历史记录条目的格式如下: YYYY-MM-DD - Chris -- Version: X.X.X ==================================== - Lorem ipsum dolor sit a

我正试图编写一个正则表达式,从我正在构建的项目中保存的历史文件中提取文本块。目前,我正计划在我的文本编辑器textmate或SublimiteText 2中手动执行此提取,但最终我将使用python或php将其构建到一个脚本化流程中,目前尚未决定

“我的历史记录”文件中的所有历史记录条目的格式如下:

YYYY-MM-DD - Chris -- Version: X.X.X
====================================
- Lorem ipsum dolor sit amet, vim id libris epicuri
- Et eos veri quodsi appetere, an qui saepe malorum eloquentiam.
...

--
其中X是完成工作的版本号

我试图从版本号到最后的双破折号分隔符(表示文本块的结尾)提取所有内容

我首先创建正则表达式语句来选择有效的节标题:

(^[\d]{4}-[\d]{2}-[\d]{2}\s-\s[\w]+\s--\sVersion:\s)[\d\.]+$
但当我试图将括号内的模式转换为后面的外观时,它失败了:

(?<=^[\d]{4}-[\d]{2}-[\d]{2}\s-\s[\w]+\s--\sVersion:\s)[\d\.]+$ 

我一直在四处寻找,到目前为止,似乎这种查找格式是正确的。我似乎不知道我错过了什么。有什么想法吗?

PHP和Python都不允许任意长度的查找。所以一旦你有一个像+这样的量词,它就会停止工作

因此,您的第一次尝试是这里唯一可行的。

如上所述,php或python中没有任意长度的查找。但是PHP中有一个解决方法!\K转义序列

从:

转义序列\K会导致以前匹配的任何字符不被替换 将包含在最终匹配的序列中。例如,模式:

   foo\Kbar
匹配foobar,但报告它已匹配foobar。此功能 类似于下面描述的lookbehind断言。然而,在这种情况下,真实匹配之前的主体部分不必像lookback断言那样具有固定长度

删除一些多余的方括号[]后,表达式如下所示

(?m)^\d{4}-\d{2}-\d{2}\s-\s\w+\s--\sVersion:\s\K[\d.]+$
注:

m:是一个内联的 你不需要逃避一个点。在字符类中:[.]将匹配一个点而不是任何字符 您可以在空白字符中添加一些量词:\s*或\s+ \w+也将匹配下划线u3;,因此要排除它,您可以使用[^\w_3;]+ Regex很棒
令人惊叹的知道我不能进行可变长度的查找,我将标题格式改为YYYY-MM-DD-Version:X.X.X-Chris,并将语句改为?Lookback's几乎从未像这样使用过。明白了,我想这是罕见的情况之一;我说几乎永远不会,因为你可以简单地捕获你想要的,而不从匹配中排除任何东西,所以你不使用它来强制执行条件。您正在使用它从不必要的匹配组0中排除。啊,好的。根据你第一次的评论,我不知道你的意思是什么。我想我还是有点不明白为什么我不想按我概述的方式做。如果该语句表示文本块的开始,那么除了版本号之外,我什么都不想要,并且除了字符串匹配之外,没有其他方法可以告诉特定块从何处开始,为什么我仍然希望在后面查找中包含该字符串?下面是一个示例,无后顾之忧:$string=2013-11-25-Chris-版本:2.1.7\nwhat-1\n-\n2013-11-25-Fred-版本:2.1.7\nwhat-2$count=preg_match_all'/^\d{4}-\d{2}-\d{2}\s-\s\w+\s-\s版本:\s[\d\.]+.*:^-|?![\S\S]/sm',$string,$matches;对于$i=0$伊凡塔斯蒂克!感谢您添加注释和修改的声明。我对regex还是个新手,我上周开始研究它,所以很高兴看到可以忽略的冗余和需要注意的提示。也感谢您链接到regex101.com。我不知道这个网站存在。这在将来将是一个巨大的帮助。@ChrisSchmitz加入更多的提示和技巧,您甚至可以讨论您的正则表达式问题。谢谢您提供另一个有用的链接。我需要花一些时间来进一步探索stackoverflow。我甚至没有意识到有聊天室