我有不同类型的正则表达式,可以存在于字符串中 . 例如:
1. ${n} 2. {{coinsAdded}} 3. ${coinsAdded}, etc.
我必须创建一个模式,以便我可以找到字符串中存在的所有类型的正则表达式 . 有人可以试着帮助我 .
我已经创建了一个模式 -
\$\\{[a-zA-Z]*+\\}
但这只能满足我对像1和3这样的正则表达式的需求,但是它失败了2 .
感谢@Spara指出失踪
(?:\${)[a-zA-Z]+(?:})|(?:\${{)[a-zA-Z]+(?:}})|(?:{{)[a-zA-Z]+(?:}})
Demo
You can try this
\$?{{?[a-zA-Z]*}}?
解释
\$? - 将匹配 $ ( ? 使其成为可选项) .
\$?
$
?
{{? - 将匹配 { 或 {{ .
{{?
{
{{
[a-zA-Z]* - 将匹配a到z的任何字符零次或多次 .
[a-zA-Z]*
}}? - 将匹配 } 或 }} .
}}?
}
}}
我能想到的最简单的*正则表达式是:
\\$?(\\{[a-zA-Z]+}|\\{\\{[a-zA-Z]+}})
*以“最容易理解”的意义,而不是“最紧凑”的意义 .
\\$? 匹配可选的 $ . 之后,遵循 \\( 之一:\\{[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
2 回答
感谢@Spara指出失踪
Demo
You can try this
\$?
- 将匹配$
(?
使其成为可选项) .{{?
- 将匹配{
或{{
.[a-zA-Z]*
- 将匹配a到z的任何字符零次或多次 .}}?
- 将匹配}
或}}
.Demo
我能想到的最简单的*正则表达式是:
*以“最容易理解”的意义,而不是“最紧凑”的意义 .
\\$?
匹配可选的$
. 之后,遵循\\(
之一:\\{[a-zA-Z]+}
,即使用一对{}
的正则表达式,|
或者,\\{\\{[a-zA-Z]+}}
正则表达式使用双{{}}
.测试:
输出: