先來看個例子
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 非貪婪匹配 當字元?緊隨其他限定符 之後時,匹配模式變成...