验证文本,运算符和([])括号的字符串

时间:2010-03-30 04:53:37

标签: java regex

我想要一个正则表达式来验证字符串只包含文本,运算符和这些括号([ ])

3 个答案:

答案 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]+\\]\\)"));