You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Java正则表达式:提取单引号间内容(后单引号在括号/逗号前)

Java正则提取指定位置单引号内文本解决方案

可行正则表达式

用于提取单引号包裹的文本,且结束单引号后(允许空白字符)紧跟(、)、[、]或,的正则表达式如下:

'((?:[^']|'(?![\s]*[()\[\],]))*)'(?=[\s]*[()\[\],])

Java代码示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class QuoteExtractor {
    public static void main(String[] args) {
        String testStr = "( $REC_REM$.cApplicationOrigin == '---' )  ||  ( $REC_REM$.cApplicationOrigin in ['AOL MOBILE','FASTWEB','POS.TE','SALES'FORCE','13'] )";
        Pattern pattern = Pattern.compile("'((?:[^']|'(?![\\s]*[()\\[\\],]))*)'(?=[\\s]*[()\\[\\],])");
        Matcher matcher = pattern.matcher(testStr);
        
        while (matcher.find()) {
            System.out.println(matcher.group(1));
        }
    }
}

运行后输出结果:

---
AOL MOBILE
FASTWEB
POS.TE
SALES'FORCE
13

正则逻辑解释

  • ':匹配起始单引号
  • 捕获组((?:[^']|'(?![\s]*[()\[\],]))*):
    • [^']:匹配任意非单引号字符
    • '(?![\s]*[()\[\],]):匹配单引号,但通过正向否定预查确保该单引号后不会紧跟(允许空白)指定的边界符号,以此保留文本内部的单引号(如SALES'FORCE中的单引号)
  • ':匹配结束单引号
  • (?=[\s]*[()\[\],]):正向预查,确保结束单引号后(允许空白)是指定的边界符号((、)、[、]或,)

原正则问题分析

你之前使用的正则'([^'\\]*(?:\\.[^'\\]*)*)仅能处理转义单引号(如\'),且会在第一个未转义的单引号处终止匹配,无法保留文本内部未转义的单引号(比如SALES'FORCE中的单引号),同时也没有限定结束单引号的位置,导致不符合你的提取规则。

内容的提问来源于stack exchange,提问作者Plijen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:22:47