正規表示式 非貪婪匹配

2021-10-25 11:30:19 字數 1019 閱讀 5748

先來看個例子

final

static string text =

"999www.chinoukin.com&888"

;final

static string regex =

".*"

;public

static

void

main

(string[

] args)

}

預想輸出結果

999<

/b>

888<

/b>

實際輸出結果

999<

/b>www.chinoukin.com&

888<

/b>

很顯然這個正規表示式已經被貪婪的匹配了,不是我們想要的結果

分析:將字串拆成2段如下:

第一段:

第二段:

999<

/b>www.chinoukin.com&

888<

/b>

可以發現第二段也滿足了正規表示式的後半部分「.*」

方案一

正規表示式盡量準確,讓其更細粒度的匹配,此時可以將正規表示式修改為

final

static string regex =

"\\d*"

;

方案二

使用非貪婪模式,可以將正規表示式修改為

final

static string regex =

".*?"

;

?在正規表示式中也有另外乙個作用,就是開啟非貪婪的模式,組內第一次匹配就返回結果

正規表示式 貪婪與非貪婪匹配

貪婪匹配與非貪婪匹配 貪婪匹配 預設情況下,正規表示式使用最長匹配原則 也叫貪婪匹配原則 例如 要將 zoom 中匹配 zo?的部 分替換成 r 替換的的結果是 rom 如果要將 zoom 中匹配 zo 的部分替換成 r 替換後的結果是 rm 非貪婪匹配 當字元?緊隨其他限定符 之後時,匹配模式變成...

正規表示式 貪婪與非貪婪匹配

貪婪匹配與非貪婪匹配 貪婪匹配 預設情況下,正規表示式使用最長匹配原則 也叫貪婪匹配原則 例如 要將 zoom 中匹配 zo?的部 分替換成 r 替換的的結果是 rom 如果要將 zoom 中匹配 zo 的部分替換成 r 替換後的結果是 rm 非貪婪匹配 當字元?緊隨其他限定符 之後時,匹配模式變成...

正規表示式 貪婪與非貪婪匹配

貪婪匹配與非貪婪匹配 貪婪匹配 預設情況下,正規表示式使用最長匹配原則 也叫貪婪匹配原則 例如 要將 zoom 中匹配 zo?的部 分替換成 r 替換的的結果是 rom 如果要將 zoom 中匹配 zo 的部分替換成 r 替換後的結果是 rm 非貪婪匹配 當字元?緊隨其他限定符 之後時,匹配模式變成...