正規表示式貪婪匹配

2021-09-13 17:29:21 字數 820 閱讀 9420

個人感覺對正規表示式理解的還算多的,貪婪模式也用過,但是最近匹配位址資訊的時候老是出錯 ,如下 

【寧波-鄞州】....[21.59901313997095;29.80867802546617]$寧波鄞州區鄞縣大道萬科桂語裡小區(盲點小區),編號:fg_2019

【寧波-鄞州】....[21.59901313997095;29.80867802546617]$鄞州區鄞縣大道萬科桂語裡小區(盲點小區),編號:fg_2019

【寧波-鄞州】....$寧波市鄞州區鄞縣大道萬科桂語裡小區(盲點小區),編號:fg_2019 

文字裡面經緯度為空的需要匹配出位址資訊,位址資訊只針對浙江,

city="(杭州|寧波|溫州。。。。。)"

district="(濱江|上城|西湖。。。。鄞州)"

獲取子匹配1的時候老是沒有匹配到寧波,將寧波後面的?去掉就可以匹配到,一直除錯了好久,後來發現是貪婪匹配導致的最前面的.*會一直往後面匹配,直到遇到必須存在的(上城|鄞州|龍泉)才會停下來,

改動如下:在最前面的.*後面加個?

.*?((杭州|寧波)?市?(上城|鄞州|龍泉)[^】].*?)[,|,|\\(].*

最終 改版,有的區縣帶「區" 有的沒有,,,區縣後面不能為】,$

pattern pat = pattern.compile("^.*?("+strtools.regcity+"?+市?"+strtools.regdistrict+"[^】\\$][^】\\$].*?)[,|,|.|(].*$");

正規表示式 貪婪匹配

例如 booooooaaobbbbbyy 匹配規則 b.b 匹配結果 bbb 個人理解,根據正規表示式會盡可能多的匹配字串,所以,第一次匹配時會將整個字串匹配下來,並記錄回溯點 最後乙個y 然後繼續根據匹配規則進行匹配,即匹配b,結果引擎發現沒有b,於是進行回溯,會將之前匹配的字串從右到左 吐 出乙...

正規表示式 貪婪匹配 轉義

preg match pa terr n,str 判斷是否匹配 preg replace pa tter n,replace,st r 將 符合的部 分替換為 replace,其中 內為一部分 此處占有乙個字元 匹配前面的 0個字元 匹配前面的 1個字元 匹配前面的0個或者1個字元 abc,匹配1個...

正規表示式 非貪婪匹配

先來看個例子 final static string text 999www.chinoukin.com 888 final static string regex public static void main string args 預想輸出結果 999 b 888 b 實際輸出結果 999 b...