2012-05-09 114 views
0

是否有可能在java中使用Pattern.DOTALL選項來匹配字符串而不是的換行符,並使用\ n來搜索行?匹配字符串的結尾但不包含換行符?

實例:

1)

aaa\n==test==\naaa\nbbb\naaa 

2)

bbb\naaa==toast==cccdd\nb\nc 

3)

aaa\n==trick==\naaaDDDaaa\nbbb 

我想匹配

\naaa\nbbb\naaa 

cccdd\nb\nc 

,但在第三個例子,我不想匹配文本亞特DDD。

\naaa 
+0

請詳細說明與樣本問題行 –

+0

你的要求是你可以匹配直到換行,不包括換行符。 – keyser

+0

如果您可以告訴我們您想要匹配的輸入文字,會更好。之後我們可以使用正確的正則表達式。 – anubhava

回答

0

您所需要的正則表達式是:

"(?s)==(?!.*?==)([^(?:DDD)]*)" 

下面是完整的代碼:

String[] sarr = {"aaa\n==test==\naaa\nbbb\naaa", "bbb\naaa==toast==cccdd\nb\nc", 
       "aaa\n==trick==\naaaDDDaaa\nbbb"}; 

Pattern pt = Pattern.compile("(?s)==(?!.*?==)([^(?:DDD)]*)"); 

for (String s : sarr) { 
    Matcher m = pt.matcher(s); 
    System.out.print("For input: [" + s + "] => "); 
    if (m.find()) 
     System.out.println("Matched: [" + m.group(1) + ']'); 
    else 
     System.out.println("Didn't Match"); 
} 

OUTPUT:

For input: [aaa\n==test==\naaa\nbbb\naaa] => Matched: [\naaa\nbbb\naaa] 
For input: [bbb\naaa==toast==cccdd\nb\nc] => Matched: [cccdd\nb\nc] 
For input: [aaa\n==trick==\naaaDDDaaa\nbbb] => Matched: [\naaa] 
1

是的,有。例如,(?-m)}$將匹配Java源文件最後的緊湊大括號。關鍵是禁用多行模式。您可以按照我的示例禁用或通過在Pattern實例上設置適當的標誌。

更新:我相信當您實例化Pattern時默認關閉多行,但在Eclipse的正則表達式中查找。

+0

對不起,我忘了發佈整個問題。我用一個文本樣本更新了這個問題。 – indiepack

+0

請添加您的示例字符串的預期匹配。我還不清楚你想要什麼。 –

+0

發表了一個新的例子,我弄了一個先例。 – indiepack

相關問題