我正在为我需要解析命令行参数的问题编写解决方案。在解析之前,我首先进行了验证。
允许的参数是:
someKey=(apps IN (app1))
someKey=(apps IN (app1,app2))
someKey=(apps IN (app1,app2, app3))
但是如果逗号位于上一个应用名称的末尾,那么我希望验证失败。
someKey=(apps IN (app1,app2,))
我写的正则表达式如下。
\(apps\sIN\s\((app\d|,)+\)\)
但它同时采取有效和无效的案件。我得到了一些关于前瞻和查看后面的参考,但未能正确实现它。你们中的任何人都可以帮助我理解这个问题的解决方案是什么?
答案 0 :(得分:0)
您可以使用\(apps\sIN\s\((app\d+)(,\s*app\d+)*\)\)
这将确保至少出现一次app\d+
,并且每次后续出现都必须以逗号(和可选的空格)开头。
如果您需要捕获应用名称,可以使用:
\(apps\sIN\s\((app\d+)((?:,\s*(?:app\d+))*)\)\)
并且您将在捕获组1中拥有第一个应用程序名称,其余 - 包括逗号 - 在捕获组2中,然后需要用逗号分隔并使空格strip
脱离