Java 验证文本、运算符和([])方括号的字符串
我想要一个正则表达式来验证字符串是否只有文本、运算符和这些括号来匹配这些字符:Java 验证文本、运算符和([])方括号的字符串,java,regex,Java,Regex,我想要一个正则表达式来验证字符串是否只有文本、运算符和这些括号来匹配这些字符: if (str.matches("[a-zA-Z\\[\\]+\\-/*()]*")) { ... } 更好的版本是: if (str.matches("\\s*\\[[a-zA-Z]+\\](\\s*[/*+-]\\s*\\[[a-zA-Z]+\\])*")) { ... } 支持括号很困难,因为如果可以将表达式放在括号中,它就不再是一种常规语言(它是一种上下文无关的语言)。正则表达式不适合匹配这种表达
if (str.matches("[a-zA-Z\\[\\]+\\-/*()]*")) {
...
}
更好的版本是:
if (str.matches("\\s*\\[[a-zA-Z]+\\](\\s*[/*+-]\\s*\\[[a-zA-Z]+\\])*")) {
...
}
支持括号很困难,因为如果可以将表达式放在括号中,它就不再是一种常规语言(它是一种上下文无关的语言)。正则表达式不适合匹配这种表达式。为此,您需要一个PDA(下推自动机)
如果要在字符串中包含括号:
String foo = "([price] + [test])";
System.out.println(foo.matches("\\(\\[[a-zA-Z]+\\] ?[+/*-] ?\\[[a-zA-Z]+\\]\\)"));
我jst想要+,-*,/as运算符和([])以及textit shld匹配([price]+[test])([price]+[test])模式应该是这样的,运算符是+,-,/*
String foo = "([price] + [test])";
System.out.println(foo.matches("\\(\\[[a-zA-Z]+\\] ?[+/*-] ?\\[[a-zA-Z]+\\]\\)"));