为以下模式生成正则表达式

时间:2015-04-08 10:07:29

标签: java regex

构建一个匹配“$ {0}和$ {1}或$ {2}”的正则表达式

条件

必须有$后跟{}大括号,只有数字0-9。字符串中只能有一个这样的模式。如果存在多个这样的模式,则可以存在后跟AND或OR的空格。

在OR或AND之后,应该出现相同的$ {}模式,只有括号之间的数字。

尝试过以下\$\{\d*\} | OR | AND | \s+

1 个答案:

答案 0 :(得分:1)

您需要在没有逻辑正则表达式运算符的情况下形成单个正则表达式以匹配整行。

^\$\{\d{1,3}\}(?:\s+(?:and|or)\s+\$\{\d{1,3}\})*$

由于$是正则表达式中的特殊字符,因此您需要按顺序对其进行转义以匹配文字$符号。

DEMO

^\$\{\d{1,3}\}(?:\s+(?:and|or)\s+\$\{\d{1,3}\})+$

预计and个符号之间至少有一个or$

DEMO

String s = "${0} and ${1} or ${2}";
System.out.println(s.matches("^\\$\\{\\d{1,3}\\}(?:\\s+(?:and|or)\\s+\\$\\{\\d{1,3}\\})*$"));
// true