[在SO和其他地方,有一些解决此问题的“典型”解决方案的示例,但我们需要有关版本稍有不同的帮助。
我们有如下字符串
pies
bob likes,
larry likes,
harry likes
cakes
以及以下正则表达式
(?<=pies\n|\G,\n)(\w+ likes)
[仅当字符串以py开头时,我们才能按预期捕获'nnn likes',但是,如果不以'cakes'结尾,我们还需要捕获失败,并且我们尝试这样做也失败了。
链接到regex101:https://regex101.com/r/uDNWXN/1/
感谢任何帮助。
[我建议在开头添加额外的前瞻,以确保最后一行不等于cakes
:
(?s)(?<=\G(?!^),\n|^pies\n(?!.*\ncakes$))(\w+ likes)
请参见regex demo(没有预期的匹配,请在最后一行添加一些字符以进行匹配)。
图案详细信息
(?s)
-DOTALL /单行修饰符,以使.
匹配任何字符,包括换行符(?<=
-向后看是正向,需要在当前位置的左侧立即添加以下内容:\G(?!^),\n
-在上一场比赛结束后,先是逗号,然后是换行符|
-或^pies\n(?!.*\ncakes$)
-字符串的开始,pies
,换行符后跟没有尽可能多的0+字符,然后是换行符,cakes
和字符串的末尾)
-后面的结尾(\w+ likes)
-组1:任何一个或多个字母,数字或下划线,然后有空格和likes
。