正则表达式匹配至可选结束词,无结束词时匹配整串
解决方案
可以使用正向预查实现这个需求,正则表达式如下:
^(.*?)(?=\s+WHERE|$)
正则说明:
^:锚定字符串起始位置,避免从中间开始匹配.*?:非贪婪模式匹配任意字符,确保不会跳过第一个WHERE(?=\s+WHERE|$):正向预查,匹配两种场景:- 后面紧跟一个或多个空白字符 +
WHERE(此时匹配到WHERE之前的内容) - 字符串结尾(此时匹配整个字符串)
- 后面紧跟一个或多个空白字符 +
测试验证:
针对你的三个示例输入,匹配结果完全符合预期:
- 输入:
" \n SELECT id FROM table WHERE country=US"→ 匹配结果:" \n SELECT id FROM table" - 输入:
" \n SELECT id FROM table"→ 匹配结果:" \n SELECT id FROM table" - 输入:
" \n SELECT id FROM table GROUP BY"→ 匹配结果:" \n SELECT id FROM table GROUP BY"
如果需要适配WHERE前可能没有空白字符的场景,可以将正则调整为:
^(.*?)(?=\s*WHERE|$)
内容的提问来源于stack exchange,提问作者user3281392
相关产品推荐
相关产品推荐

