我在表达式中使用正则表达式:example !(FA1_A.i & FA1_M.i)
我有运营商:! ( ) & |
操作数的名称为:[a-zA-Z_]*\.[a-zA-Z_]
我编写了Java代码来分割令牌,但它并没有拆分运算符和操作数。它应该是!,(,FA1_A.i,&,FA1_m.i,)。有谁能告诉我出了什么问题?
String stringOpеrator = "([!|&()])";
String stringOperand = "(([a-zA-Z_]*)\\.([a-zA-Z_]*))";
String reg=stringOpеrator+"|"+stringOperand;
Pattern pattern = Pattern.compile(reg);
Matcher m = pattern.matcher(expression);
// System.out.println("func: " + function + " item: " + item);
while (m.find()) {
int a=m.start();
int b=m.end();
String test=expression.substring(m.start(), m.end());
String g=test;
tokens.add(new Token(expression.substring(m.start() , m.end())));
//m = pattern.matcher(expression);
}
答案 0 :(得分:4)
您提供的示例中的名称似乎包含您的正则表达式不匹配的数字。
答案 1 :(得分:0)
您必须更改以下代码
String stringOperand = "(([a-zA-Z_]*)\\.([a-zA-Z_]*))";
以强>
String stringOperand = "(([a-zA-Z_0-9]*)\\.([a-zA-Z_0-9]*))";