java - 使用正则表达式匹配特定运算符
问题描述
我有一个字符串
INDEX IN('AAA','BBB')
我想像这样拆分它,
INDEX, IN, ('AAA','BBB')
这是我正在使用的正则表达式,
Pattern pattern = Pattern.compile("(.*?)(>=|<=|<>|>|<|BETWEEN|IN|=)(.*)");
这是我得到的结果,
IN , DEX IN'AAA','BBB'
有人可以帮我解决一下我的正则表达式吗?
解决方案
问题是.*?
匹配尽可能少的字符,直到第一次出现后续模式和下一个子模式可以匹配IN
(and BETWEEN
) 作为单词的一部分。
您不能简单地在第 2 组周围添加单词边界,因为在它们周围带有单词边界的非单词字符在非单词上下文中将不匹配。
您可以使用修复正则表达式
Pattern pattern = Pattern.compile("(.*?)([><]=|<>|[><=]|\\b(?:BETWEEN|IN)\\b)(.*)");
请参阅正则表达式演示。
细节
(.*?)
- 第 1 组:除换行符以外的任何 0+ 个字符,尽可能少([><]=|<>|[><=]|\\b(?:BETWEEN|IN)\\b)
->
or<
and then=
, or<>
, or<
,>
,=
, orBETWEEN
orIN
作为整个词(.*)
- 第 3 组:除换行符之外的任何 0+ 个字符,尽可能多
推荐阅读
- freemarker - 如何将日历对象转换为 ISO 8601 格式的 DateTime 字符串?
- amazon-web-services - 使用相同的 GraphQL 资源设置第二个 Amplify 项目
- c++ - LibVLC Demux 无法窥视
- node.js - 如何使用 opencensus / prometheus 库公开我的 NodeJS 服务的指标?
- c - 如何使用带有 FoundationDB 文档层的 MongoDB C 驱动程序进行事务?
- gis - Openlayers ImageWMS 构造函数不读取 BBOX 参数
- java - 从 Java 应用程序访问微服务
- python - 我怎样才能摆脱这个回溯错误: ValueError: invalid literal for int() with base 10: ''
- c++ - 隐式转换会丢失信息吗?
- .net - 如何让 vb.net 一次写入和编辑多条记录?