兩側勉強匹配,我想用Java編寫一個正則表達式將找到量詞兩側的最短可用匹配。從Java量詞
例如,對於這種模式"a.*?b"
apllied到"aaaaaacbbbbbbb"
:
我想找到"acb"
但我得到"aaaaaacb"
。
任何人有一個想法,我的正則表達式可以使用是什麼?
兩側勉強匹配,我想用Java編寫一個正則表達式將找到量詞兩側的最短可用匹配。從Java量詞
例如,對於這種模式"a.*?b"
apllied到"aaaaaacbbbbbbb"
:
我想找到"acb"
但我得到"aaaaaacb"
。
任何人有一個想法,我的正則表達式可以使用是什麼?
你可以通過放棄貪婪.*
模仿從一開始就不願意匹配。在這種情況下,這將成爲.*(a.*?b)
,如果你得到羣號1:
String example = "aaaaaacbbbbbbb";
Matcher m = Pattern.compile(".*(a.*?b)").matcher(example);
m.find();
System.out.println(m.group(1));
你想與一個'a'
開始,以'b'
結束最短的序列。這意味着,之間的初始'a'
和最終'b'´, neither an
「一」 nor a
「b'`可能出現(否則就包含在匹配較短的這樣的序列),從而
"a[^ab]*b"
會發現一個最小的這樣的序列(第一次出現在搜索字符串中,或者所有這些,取決於你如何搜索)。
我不是非盟的懶散的語法與貪婪匹配柯朗,我覺得
"a[^a]*?b"
會做同樣的,匹配'a'
,非'a'
S的直到下一個'b'
的最小序列被發現。
@ alex23我沒有刪除它,我匹配一個與B之間的所有既不-A-NOR-B-S。 –