正则表达式为动态字符串

时间:2018-01-18 20:03:24

标签: java regex

我有一个字符串,可以有不同的形式 - 下面的一个例子

%VAR('SERVER','DEFAULT') %VAR('LOC','NYC')Run_ServerRestart.ps1

我想将它们作为单独的项目分开,并且最终无法将命令分离出来作为匹配。我的正则表达式返回上述示例的2个匹配项,而我希望得到3个匹配项。关于我可能做错了什么以及如何将它们分开如下以及是否有更有效的方法来实现这一点的任何想法?我们也需要在两者之间的任何地方容纳空间。

  • %VAR('服务器'' DEFAULT&#39)
  • %VAR(' LOC'' NYC&#39)
  • Run_ServerRestart.ps1

到目前为止,这是我的正则表达式:

/%VAR\(\s*'([^']+)'\s*\)*\,*\s*'([^']+)'\s*\)|/*\\*[\w-]+\s*\.?\S*/g

但是,上面的正则表达式与下面的一些示例不匹配。

  • c:\abc\def.txt - 应显示1场比赛
  • %VAR('SERVER','USA')\C:\batch.bat - 应显示2个匹配项 - %VAR('SERVER', 'USA')\c:\batch.bat
  • %VAR('SERVER','NYC') - 应显示1场比赛
  • %VAR('SERVER','NYC') %VAR('APP','NNJ')Run_Command.ps1 - 应显示3场比赛
  • %VAR('SERVER','NYC') %VAR('APP','NNJ')Run_Command.ps1
  • %VAR('SERVER','NYC') -File - 应显示2个匹配项 - %VAR('SERVER','NYC')-File
  • /usr/bin/cat - 应显示1场比赛
  • %VAR('SERVER','NYC')BATCH1.bat - 应显示2个匹配项 - %VAR('SERVER','NYC')BATCH1.bat
  • ftp -s:D:\\apps\\scripts\\Intel\\daily_job.ftp - 应显示1场比赛
  • %VAR('SERVER') - 应显示1场比赛

2 个答案:

答案 0 :(得分:1)

正则表达式%VAR\([^\)]+\)|[\S]+(?:\s[\S]+)?

<强>详情:

  • [^]匹配列表中不存在的单个字符
  • []匹配列表中的单个字符
  • +匹配一次且无限次
  • *零和无限次之间的匹配
  • |
  • (?:)非捕获组
  • ?匹配0到1次
  • \S匹配任何非空格字符(等于[^\r\n\t\f\v ]
  • \s匹配任何空格字符(等于[\r\n\t\f\v ]

Regex demo

答案 1 :(得分:0)

假设它们看起来总是如此,您可以将)作为分隔符

(.*\))\s(.*\))(.*)

示例说明:https://regex101.com/r/CLBFKa/1

相关问题