我正在尝试对大型药物处方集进行正则表达式搜索。我需要匹配特定药物的名称并包括所有字符,直到再次重复药物名称或达到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
答案 0 :(得分:0)
第一个问题可以通过在前瞻的末尾添加|$
来解决,以解决Quillivant
之后没有Quillivant
的情况:
/QUILLIVANT.+?(?=QUILLIVANT|$)/i
请参阅this regex demo。
为了使模式更加健壮,只需unroll the pattern:
/QUILLIVANT[^Q]*(?:Q(?!UILLIVANT)[^Q]*)*/i
[^Q]*(?:Q(?!UILLIVANT)[^Q]*)*
部分与任何0 + Q
匹配,然后任何0个或更多Q
序列未跟UILLIVANT
和0 +字符而不是{{1 }}。基本上,这意味着,此部分匹配任何文本,直到Q
或字符串结尾。