
本文介绍如何使用java正则表达式精准提取字符串中被单引号包围、且紧随其后的字符为英文逗号、右圆括号或右方括号的文本片段,适用于解析类似sql/表达式语言中的字面量列表。
本文介绍如何使用java正则表达式精准提取字符串中被单引号包围、且紧随其后的字符为英文逗号、右圆括号或右方括号的文本片段,适用于解析类似sql/表达式语言中的字面量列表。
在实际开发中(如规则引擎、动态表达式解析),我们常需从结构化字符串中提取带引号的字面值。例如,给定表达式:
String input = "( $REC_REM$.cApplicationOrigin == '---' ) || ( $REC_REM$.cApplicationOrigin in ['AOL MOBILE','FASTWEB','POS.TE','SALES''FORCE','13'] )";
目标是提取所有满足条件的单引号内内容:即 'xxx' 后紧跟空格+,) 或 ](注意:SALES'FORCE 中的内部单引号是合法转义,应完整保留)。
推荐使用的正则表达式为:
"'(.+?)'\h*[,)\]]"
✅ 关键设计说明:
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型
- '(.+?)':非贪婪匹配单引号之间的任意内容(支持空格、点号、数字、字母及内部单引号);
- \h*:匹配零个或多个水平空白符(如空格、制表符),增强对格式变化的鲁棒性;
- [,)\]]:精确限定结束边界——必须是 ,、) 或 ](注意 ] 需转义);
⚠️ 重要注意事项:
- 该正则不处理嵌套引号或复杂转义逻辑(如 ''' 表示单引号字符)。若输入中存在标准SQL风格的双单引号转义(如 'SALES''FORCE'),当前模式会将中间 '' 视为普通字符,正确捕获整个 'SALES''FORCE' → SALES'FORCE,符合预期;
- Java中字符串字面量需对反斜杠二次转义,故 h 写作 \h,] 在字符类中无需额外转义,但为清晰仍建议写为 \];
- 若需排除前后空白(如 ' hello ' 提取为 hello),可在捕获组内添加 \s* 边界处理,但本例中原始需求明确要求保留内部空格(如 'AOL MOBILE' → AOL MOBILE),故不建议裁剪。
? 完整Java示例代码:
import java.util.*;
import java.util.regex.*;
public class QuoteExtractor {
public static void main(String[] args) {
String input = "( $REC_REM$.cApplicationOrigin == '---' ) || ( $REC_REM$.cApplicationOrigin in ['AOL MOBILE','FASTWEB','POS.TE','SALES''FORCE','13'] )";
String regex = "'(.+?)'\h*[,)\]]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
List<string> results = new ArrayList();
while (matcher.find()) {
results.add(matcher.group(1)); // 获取捕获组1的内容
}
System.out.println(results);
// 输出: [---, AOL MOBILE, FASTWEB, POS.TE, SALES'FORCE, 13]
}
}</string>
? 总结:该方案简洁高效,覆盖常见表达式语法场景。如需扩展支持双引号、三重引号或更严格的SQL转义规则(如识别 '' 为单引号字符),建议改用词法分析器(如ANTLR)而非纯正则——正则适用于“边界明确、结构扁平”的提取任务,而复杂语法解析应交由专用工具。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










