查询正则表达式模式

时间:2017-03-21 13:54:38

标签: php regex

数据以及regex pattern I'm using is linked here

(?m)(?<=Note:)(\w+|\s+)*$

示例文本为:

Date:21
Month:03
Year:2017
Amount:50
Category:Test
Account:Testimg
Note:Tested

Date:21
Month:03
Year:2017
Amount:48
Category:Great
Account:Good
Note:Better

你可以想象,我希望在#34之后的所有文字;注意:&#34;包括空格和直到线的末端。我得到了我需要的结果,但我不确定这是否是一个合适的解决方案。

这是正确的方式吗?它会变得更简单吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

由于您的行以Note:开头,因此您需要先使用^锚点。您可以按我在第一条评论中的建议使用捕获

preg_match_all('/^Note:(.+)/m', $s, $matches)

请参阅this demo

在这里,^Note:(.+)将在行的开头断言位置,然后Note:将匹配,然后除了换行符之外的任何1个字符将被捕获到第1组,你只需要使用正确的索引访问它。

或者,使用\K删除Note:

preg_match_all('/^Note:\K.+/m', $s, $matches)

请参阅another regex demo

此处,^Note:\K.+也会匹配该行开头的Note:,然后由于\K匹配重置运算符而删除文本,然后是其他1个字符线路中断字符将被消耗并放入匹配缓冲区。

请注意,此处甚至不需要$锚点,因为.+只能贪婪地匹配到自己的行尾。

答案 1 :(得分:1)

您可以将此简化为/Note:(.*)$/gm,我已更新您的regex101 example。但除此之外,你是正确的方式。