2013-05-20 12 views
1

兩側勉強匹配,我想用Java編寫一個正則表達式將找到量詞兩側的最短可用匹配。從Java量詞

例如,對於這種模式"a.*?b" apllied到"aaaaaacbbbbbbb"

我想找到"acb"但我得到"aaaaaacb"

任何人有一個想法,我的正則表達式可以使用是什麼?

回答

2

你可以通過放棄貪婪.*模仿從一開始就不願意匹配。在這種情況下,這將成爲.*(a.*?b),如果你得到羣號1:

String example = "aaaaaacbbbbbbb"; 
Matcher m = Pattern.compile(".*(a.*?b)").matcher(example); 
m.find(); 
System.out.println(m.group(1)); 
2

你想與一個'a'開始,以'b'結束最短的序列。這意味着,之間的初始'a'和最終'b'´, neither an「一」 nor a「b'`可能出現(否則就包含在匹配較短的這樣的序列),從而

"a[^ab]*b" 

會發現一個最小的這樣的序列(第一次出現在搜索字符串中,或​​者所有這些,取決於你如何搜索)。

我不是非盟的懶散的語法與貪婪匹配柯朗,我覺得

"a[^a]*?b" 

會做同樣的,匹配'a',非'a' S的直到下一個'b'的最小序列被發現。

+0

@ alex23我沒有刪除它,我匹配一個與B之間的所有既不-A-NOR-B-S。 –