2012-06-02 110 views
0

我要赶一个单引号的文本,但逃过单引号(\“)不应该被视为一个分隔符, 例如:java正则表达式 - 忽略引号?

这种‘WASN \’吨最好的”天

应当返还

  • 是不是最好的

谢谢。

我已经试过这样:

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'to来”

+0

我想知道这是一个可以用正则表达式解决的问题。如果您有两个引用文本块或嵌套块,该怎么办? –

+0

我认为它可以..使用不情愿的量词 –

+0

我认为它也可以,但不使用使用不情愿的量词。 –

回答

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 

是你在找?

+0

正是!谢谢 –

+0

@babybang这不太合适。它会将'\\''(''\\\''')看作是一个转义引用,当它实际上是一个转义反斜杠后面跟着一个真实的引号并且应该表示引用字符串的结尾。 – Paulpro

+0

@ PaulP.R.O。 \对字符串和正则表达式有特殊的含义,所以我需要把它关闭两次(在两层中):我需要把\\放在正则表达式中 - >所以我需要把\\\\放在字符串 – Pshemo

1

一个正则表达式可能是这样的:

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

正如在单引号'后面加上0到许多既不是单引号也不是反斜线的chacacters,或者是反斜线后跟任何字符,然后是单引号。

看到这个regexpal

+0

您节省了我的一天,谢谢 –

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

使用负回顾后以保证原料的报价是没有逃过