我想要一个正则表达式来验证字符串只包含文本,运算符和这些括号([ ])
答案 0 :(得分:1)
匹配这些字符:
if (str.matches("[a-zA-Z\\[\\]+\\-/*()]*")) {
...
}
更好的版本是:
if (str.matches("\\s*\\[[a-zA-Z]+\\](\\s*[/*+-]\\s*\\[[a-zA-Z]+\\])*")) {
...
}
支持括号很难,因为如果你可以将表达式放在括号中,它就不再是常规语言(它是无上下文的语言)。正则表达式不适合匹配这种表达式。为此,你需要一个PDA(下推自动机)。
答案 1 :(得分:1)
我强烈建议您查看并使用http://www.regexbuddy.com/。
答案 2 :(得分:0)
String foo = "[price] + [test]";
System.out.println(foo.matches("\\[[a-zA-Z]+\\] ?[+/*-] ?\\[[a-zA-Z]+\\]"));
如果你想在字符串中加入括号:
String foo = "([price] + [test])";
System.out.println(foo.matches("\\(\\[[a-zA-Z]+\\] ?[+/*-] ?\\[[a-zA-Z]+\\]\\)"));