首页 > 解决方案 > 使用正则表达式匹配特定运算符

问题描述

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

我有一个字符串

INDEX IN('AAA','BBB')

我想像这样拆分它,

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

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

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

这是我得到的结果,

IN , DEX IN'AAA','BBB'

有人可以帮我解决一下我的正则表达式吗?

标签: javaregex

解决方案


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

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

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

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

请参阅正则表达式演示

细节

  • (.*?)- 第 1 组:除换行符以外的任何 0+ 个字符,尽可能少
  • ([><]=|<>|[><=]|\\b(?:BETWEEN|IN)\\b)- >or <and then =, or <>, or <, >, =, or BETWEENorIN作为整个词
  • (.*)- 第 3 组:除换行符之外的任何 0+ 个字符,尽可能多

推荐阅读