[英]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)
- >
或<
然后再=
或<>
或<
, >
, =
或BETWEEN
或IN
整个单词 (.*)
-组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.