2012-06-02 194 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
(?<!\\\\)'([^'\\\\]|\\\\.)*' 

使用負回顧後以保證原料的報價是沒有逃過