为$ {n}类型和{{coinsadded}}类型的变量创建单一模式,以便可以在字符串中找到它

我有不同类型的正则表达式,可以存在于字符串中 . 例如:

1. ${n}
2. {{coinsAdded}}
3. ${coinsAdded}, etc.

我必须创建一个模式,以便我可以找到字符串中存在的所有类型的正则表达式 . 有人可以试着帮助我 .

我已经创建了一个模式 -

\$\\{[a-zA-Z]*+\\}

但这只能满足我对像1和3这样的正则表达式的需求,但是它失败了2 .

回答(2)

2 years ago

感谢@Spara指出失踪

(?:\${)[a-zA-Z]+(?:})|(?:\${{)[a-zA-Z]+(?:}})|(?:{{)[a-zA-Z]+(?:}})

Demo

You can try this

\$?{{?[a-zA-Z]*}}?

解释

  • \$? - 将匹配 $? 使其成为可选项) .

  • {{? - 将匹配 {{{ .

  • [a-zA-Z]* - 将匹配a到z的任何字符零次或多次 .

  • }}? - 将匹配 }}} .

Demo

2 years ago

我能想到的最简单的*正则表达式是:

\\$?(\\{[a-zA-Z]+}|\\{\\{[a-zA-Z]+}})

*以“最容易理解”的意义,而不是“最紧凑”的意义 .

\\$? 匹配可选的 $ . 之后,遵循 \\( 之一:
\\{[a-zA-Z]+} ,即使用一对 {} 的正则表达式,
| 或者,
\\{\\{[a-zA-Z]+}} 正则表达式使用双 {{}} .

测试:

System.out.println("{n}".matches("\\$?(\\{[a-zA-Z]+}|\\{\\{[a-zA-Z]+}})"));
System.out.println("{{coinsAdded}}".matches("\\$?(\\{[a-zA-Z]+}|\\{\\{[a-zA-Z]+}})"));
System.out.println("${coinsAdded}".matches("\\$?(\\{[a-zA-Z]+}|\\{\\{[a-zA-Z]+}})"));
System.out.println("{{{coinsAdded}}}".matches("\\$?(\\{[a-zA-Z]+}|\\{\\{[a-zA-Z]+}})"));
System.out.println("$${coinsAdded}".matches("\\$?(\\{[a-zA-Z]+}|\\{\\{[a-zA-Z]+}})"));

输出:

true true true false false