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

loading...


1

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

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

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

我已经创建了一个模式 -

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

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

loading...

2回答

  • 1

    感谢@Spara指出失踪

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

    Demo

    You can try this

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

    解释

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

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

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

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

    Demo


  • 0

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

    \\$?(\\{[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

评论

暂时没有评论!