繁体   English   中英

使用正则表达式匹配特定运算符

[英]Matching specific operator using regex

因此,这是输入中参数以不同形式存在时拆分字符串的后续操作

我有一个像

INDEX IN('AAA','BBB')

我想这样拆分

INDEX, IN, ('AAA','BBB')

这是我正在使用的正则表达式

Pattern pattern = Pattern.compile("(.*?)(>=|<=|<>|>|<|BETWEEN|IN|=)(.*)");

这就是我得到的结果

IN , DEX IN'AAA','BBB'

有人可以帮我一些正则表达式吗?

问题是.*? 匹配尽可能少的字符,直到后续模式的第一次出现为止,并且下一个子模式可以将IN (和BETWEEN )作为单词的一部分进行匹配。

您不能简单地在第2组周围添加单词边界,因为带有单词边界的非单词字符在非单词上下文中将不匹配。

您可以使用以下方式修复正则表达式

Pattern pattern = Pattern.compile("(.*?)([><]=|<>|[><=]|\\b(?:BETWEEN|IN)\\b)(.*)");

参见regex演示

细节

  • (.*?) -组1:除换行符外的任何0+个字符,尽可能少
  • ([><]=|<>|[><=]|\\\\b(?:BETWEEN|IN)\\\\b) - ><然后再=<><>=BETWEENIN整个单词
  • (.*) -组3:尽可能多的除换行符以外的0+个字符

正如文章中所建议的那样, 当输入中的参数以不同形式存在时,您已链接了“ 拆分字符串” ,最好的方法是使用特定域语言(DSL),例如ANTLR或JavaCC。

例如,一个非常简单的ANTLR4语法如下:

grammar simpleTest
start : 'INDEX' 'IN' '(' '\'' .*? '\'' ',' '\'' .*? '\''  ')';

解析您的输入时,将生成具有以下TreeNodes的一棵Tree:

TreeChildNode[0]  = INDEX
TreeChildNode[1]  = IN
TreeChildNode[2]  = (
TreeChildNode[3]  = '
TreeChildNode[4]  = AAA // AAA could any sequence of char of any length
TreeChildNode[5]  = '
TreeChildNode[6]  = ,
TreeChildNode[7]  = '
TreeChildNode[8]  = BBB // BBB could any sequence of char of any length
TreeChildNode[9]  = '
TreeChildNode[10] = )

因此,您可以在方便时重新组织您的输入。

暂无
暂无

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

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