正则表达式以任何顺序匹配0个或更多关键字实例

gMa*_*ale 6 regex

我对正则表达式很体面,但在这里难倒.我在下面的第2组遇到了麻烦.但是,我认为对于正则表达式大师来说这应该相当容易......

问题

我想要匹配 zero or more instances of a set of keywords, in any order


[更新:供将来参考]
最简单的解决方案(源自黑熊猫的回应)是:

((keyword1 | keyword2 | keyword3 )*)

注意:每个单词后面的空格是必不可少的!

就我而言,这转化为:
((static |final )*)

这是简单的,最简单的答案.更好,更高效的方法是黑熊猫的反应,下面.它允许任何数量的空白,并且RE引擎处理速度更快.


输入

我需要将以下输入拆分为非常具体的组.

注意:数字不是输入的一部分.也就是说,每个输入行以字母p开头.

  1. public static final int ONE = 1;
  2. public final static int TWO = 2;
  3. public final int THREE = 3;
  4. public static int FOUR = 4;
  5. private int FIVE = 5;

我需要将输入分解为匹配组

第1组=公共或私人或受保护
组2 = 0或更多"静态"或"最终"实例      < - 组我正在与
第3 组挣扎 =数据类型
组4 =变量名
组5 =值

第2组详情

鉴于上述输入,第2组如下:

  1. 静态决赛
  2. 最后的静态
  3. 最后
  4. 静态的
  5. [空字符串]

解决方案失败

这是我提出的正则表达式,id不适用于第2组:

^.*(public|private|protected)\s+(static\s+|final\s+)*\s+([^ ]+)\s+([^ ]+)\s*(;|=)(.*)$
Run Code Online (Sandbox Code Playgroud)

对于第2组,我尝试过:

  • (静态\ S + |最后\ S +)*
  • (静态|最后)*\S +
  • (静态|最终)*
  • (static\| final \)*

摘要

什么应该是"组2"的正则表达式,它匹配单词"static"或"final"的一个或多个实例.一个适当的解决方案可以扩展,以匹配任何单词的任何子集,如[静态,最终,瞬态,易失性].

bla*_*nda 2

您能抓住中间的所有内容,并确保第 3 组和更大的组存在吗?

第 2 组=((?:(?:static|final|transient|volatile)\s+)*)