java正则表达式 - 忽略引号?

时间:2012-06-02 20:07:05

标签: java regex

我想要捕获单引号文本,但转义单引号(\')不应被视为分隔符, 例如:

  

这不是最好的一天

将返回

  
      
  • 不是最好的
  •   

感谢。

我试过这个:

    public static List<String> cropQuoted (String s) {

    Pattern p = Pattern.compile("\\'[^']*\\'");
    Matcher m = p.matcher(s);
    ArrayList found = new ArrayList();
    while(m.find()){
        found.add(m.group().replaceAll("\'", ""));
        System.out.println(m.group().replaceAll("\'", ""));
    }
    return found;
}

但它未能抓住“\''best'days'来”

3 个答案:

答案 0 :(得分:1)

正则表达式可能如下所示:

"'([^'\\\\]|\\\\.)*'"

在单引号中'后跟0到多个既不是单引号也不是反斜杠的字符,或者是反斜杠后跟任何字符,后跟单引号。

请参阅此regexpal

答案 1 :(得分:1)

(?<!\\\\)'表示“每个'之前没有\

使用此功能,我们可以创建类似(?<!\\\\)'.*?(?<!\\\\)'

的内容

让我们测试一下

    String s="This 'wasn\\'t the best' day. Another 't\\'es\\'t Test' t\\'est";
    System.out.println(s.replaceAll("(?<!\\\\)'.*?(?<!\\\\)'", "X"));
    //out -> This X day. Test X t\'est

你在寻找吗?

答案 2 :(得分:0)

(?<!\\\\)'([^'\\\\]|\\\\.)*'

使用负向lookbehind确保起始引用不会被转义