Java 使用正则表达式匹配特定运算符
因此,这是对 我有一根像Java 使用正则表达式匹配特定运算符,java,regex,Java,Regex,因此,这是对 我有一根像 INDEX IN('AAA','BBB') 我想这样把它分开 INDEX, IN, ('AAA','BBB') 这是我用的正则表达式 Pattern pattern = Pattern.compile("(.*?)(>=|<=|<>|>|<|BETWEEN|IN|=)(.*)"); 有人能帮我一下正则表达式吗?问题是*?匹配尽可能少的字符,直到第一次出现后续模式,下一个子模式可以匹配中的(和之间的)作为单词的一部分 您不能简单地
INDEX IN('AAA','BBB')
我想这样把它分开
INDEX, IN, ('AAA','BBB')
这是我用的正则表达式
Pattern pattern = Pattern.compile("(.*?)(>=|<=|<>|>|<|BETWEEN|IN|=)(.*)");
有人能帮我一下正则表达式吗?问题是
*?
匹配尽可能少的字符,直到第一次出现后续模式,下一个子模式可以匹配中的(和之间的)作为单词的一部分
您不能简单地在组2周围添加单词边界,因为周围有单词边界的非单词字符在非单词上下文中不匹配
您可以使用
Pattern pattern = Pattern.compile("(.*?)([><]=|<>|[><=]|\\b(?:BETWEEN|IN)\\b)(.*)");
Pattern Pattern=Pattern.compile((*?)([>问题是*?
匹配的字符尽可能少,直到第一次出现后续模式,下一个子模式可以匹配中的(以及之间的)作为单词的一部分
您不能简单地在组2周围添加单词边界,因为周围有单词边界的非单词字符在非单词上下文中不匹配
您可以使用
Pattern pattern = Pattern.compile("(.*?)([><]=|<>|[><=]|\\b(?:BETWEEN|IN)\\b)(.*)");
Pattern=Pattern.compile((*?)([>正如您链接的帖子中所建议的,最好的方法是使用特定于域的语言(DSL),如ANTLR或JavaCC
例如,一个非常简单的ANTLR4语法如下所示:
grammar simpleTest
start : 'INDEX' 'IN' '(' '\'' .*? '\'' ',' '\'' .*? '\'' ')';
解析输入时,将生成一棵树,其中包含以下树节点:
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] = )
因此,您可以在方便的时候重新组织您的输入。正如您链接的帖子中所建议的,最好的方法是使用特定于域的语言(DSL),如ANTLR或JavaCC
例如,一个非常简单的ANTLR4语法如下所示:
grammar simpleTest
start : 'INDEX' 'IN' '(' '\'' .*? '\'' ',' '\'' .*? '\'' ')';
解析输入时,将生成一棵树,其中包含以下树节点:
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] = )
因此,您可以在方便的时候重新组织您的输入。请注意,正则表达式不适合处理像您这样的不规则问题(似乎是代码)。例如,如果使用'AAA'
而不是'AAA'
索引,会发生什么?(这是一个解释过的示例,但除非您知道这些字符串可以包含什么内容,否则您必须始终假设它可能会发生。)使用Pattern=Pattern.compile((.*)([>请注意,正则表达式不适合处理像您这样的不规则问题(似乎是代码)。例如,如果使用'AAA'
而不是'AAA'
之间的索引,会发生什么情况?(这是一个可解释的示例,但除非您知道这些字符串可以包含哪些内容,否则您将始终必须假设它可能发生)。使用模式=模式。编译((.*)([>