簡體   English   中英

匹配字符串的末尾而不匹配換行符?

[英]Match the end of the string but not newlines?

在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

就在這里。 例如, (?-m)}$將匹配Java源文件末尾的右花括號。 關鍵是要禁用多行模式。 您可以按照我的說明禁用它,也可以在Pattern實例上設置適當的標志來禁用它。

更新:我相信在實例化Pattern ,默認情況下多行是關閉的,但是在regex的Eclipse查找中是打開的。

您需要的正則表達式是:

"(?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");
}

輸出:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM