简体   繁体   English

代码示例中的Java正则表达式问题

[英]Regex problem in Java in code sample

I have job with regex in my expressions: example !(FA1_A.i & FA1_M.i) 我在表达式中处理了正则表达式:示例!(FA1_A.i & FA1_M.i)

I have operators: ! ( ) & | 我有运营商: ! ( ) & | ! ( ) & |

The operands have names: [a-zA-Z_]*\\.[a-zA-Z_] 操作数的名称为: [a-zA-Z_]*\\.[a-zA-Z_]

I wrote Java code to split on tokens, but it doesn't split on operators and operands. 我编写了Java代码以拆分标记,但没有拆分运算符和操作数。 It should be !, (, FA1_A.i, &, FA1_m.i, ) . 它应该是!,(,FA1_A.i,&,FA1_m.i,)。 Can anybody tell me what is wrong? 谁能告诉我哪里出了问题?

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);

        }

您提供的示例中的名称似乎包含数字,您的正则表达式不匹配。

You have to change following code 您必须更改以下代码

String stringOperand = "(([a-zA-Z_]*)\\.([a-zA-Z_]*))"; 

TO

String stringOperand = "(([a-zA-Z_0-9]*)\\.([a-zA-Z_0-9]*))"; 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM