[英]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.