我找到了几个相关的主题: Regular expression - match all words but match unique words only once和 get unique regex matcher results (without using maps or lists) 还有其他几个,但我无法得到他们的解决方案来解决我的问题。
我一直在阅读looharounds和backreferences,但我仍然遗漏了一些东西。
我需要搜索几个大型代码库,并找到所有唯一出现的数据源名称或变量。
我尝试了以下正则表达式:
datasource="someDSN"
datasource="anotherDNS"
datasource = "anotherDNS"
datasource="someDSN"
<cfquery name="qry_getEvent" datasource="#APPLICATION.firstDSN#">
SELECT *
FROM events
WHERE id = 1
</cfquery>
<cfquery name="qry_getPlayers" datasource="#APPLICATION.firstDSN#">
SELECT *
FROM players
WHERE event_id = 1
</cfquery>
<cfquery name="qry_getLocation" datasource="secondDSN">
SELECT *
FROM locations
WHERE event_id = 1
</cfquery>
代码可能很复杂,但基本上它看起来像这样:\
#APPLICATION.firstDSN#
secondDSN
结果应该类似于:
(?!datasource="dsnname1"|datasource="dsnname2")(datasource=\"([^"]*)\")
我发现的唯一半解决方案是多次运行(datasource = \“([^”] *)\“),但每次都在前面加上一个已知值来排除它,例如:
scenario.V.AddRange(scenarioSchema.V.Select(x => new SN() { Distro = x.Distro}));
这有助于我在几分钟内缩小所有DSN名称的范围,但如果我可以自动获得所有不同的结果,那将会变得如此简单。也许这需要添加一些Node.js工作来简化流程