数据以及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;包括空格和直到线的末端。我得到了我需要的结果,但我不确定这是否是一个合适的解决方案。
这是正确的方式吗?它会变得更简单吗?
谢谢。
答案 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)
此处,^Note:\K.+
也会匹配该行开头的Note:
,然后由于\K
匹配重置运算符而删除文本,然后是其他1个字符线路中断字符将被消耗并放入匹配缓冲区。
请注意,此处甚至不需要$
锚点,因为.+
只能贪婪地匹配到自己的行尾。
答案 1 :(得分:1)
您可以将此简化为/Note:(.*)$/gm
,我已更新您的regex101 example。但除此之外,你是正确的方式。