Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 验证文本、运算符和([])方括号的字符串_Java_Regex - Fatal编程技术网

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