获取字符串的所有实例并在中间包含文本

时间:2017-10-11 14:26:18

标签: php regex

我正在尝试对大型药物处方集进行正则表达式搜索。我需要匹配特定药物的名称并包括所有字符,直到再次重复药物名称或达到EOF。

我最接近的是使用正向前瞻,例如QUILLIVANT.+?(?=QUILLIVANT)但是当只有一个单词“QUILLIVANT”时,这不会被捕获。它还被在线正则表达式测试标记为“灾难性回溯/失控正则表达式”。

因此,如果输入blahblahblah Quillivant 40MG derp derp derp Quillivant 60MG/5ML Syrup durka durka durka,则所需的返回值为Array[0] = "Quillivant 40MG derp derp derp ", [1] = Quillivant 60MG/5ML Syrup durka durka durka

1 个答案:

答案 0 :(得分:0)

第一个问题可以通过在前瞻的末尾添加|$来解决,以解决Quillivant之后没有Quillivant的情况:

/QUILLIVANT.+?(?=QUILLIVANT|$)/i

请参阅this regex demo

为了使模式更加健壮,只需unroll the pattern

/QUILLIVANT[^Q]*(?:Q(?!UILLIVANT)[^Q]*)*/i

请参阅another regex demo

[^Q]*(?:Q(?!UILLIVANT)[^Q]*)*部分与任何0 + Q匹配,然后任何0个或更多Q序列未跟UILLIVANT和0 +字符而不是{{1 }}。基本上,这意味着,此部分匹配任何文本,直到Q或字符串结尾。