正規表示式 vim版 非貪婪匹配釋疑

2021-07-02 10:54:15 字數 974 閱讀 3170

本以為自己雖然並沒有特別精通正規表示式,但是基本的用法還是沒有問題.但是最近遇到乙個問題還是讓我捉襟見肘,在此感謝大牛哥的指導.

首先我們大致了解一下正規表示式.

元字元:

.   任意字元

^   行首

$   行尾

+   一到多個緊跟在其前面的字元的個數

?   0到1個緊跟其前面的字元

*   0到多個緊跟其前面的字元

{}   緊跟其前面的字元的個數,可選方式有., , ,分別表示出現n次,出現n到m次,出現n到多次.

ok,有了上面的這個簡要說明,下面的問題就不難理解了.

情景復現,首先看一下原始檔大致的布局:

在這段**中,我想要animal中找到不含cmdid的字段.顯然這裡面只有一行是滿足要求的.

最初的正規表示式:

/本以為這這個表示式可以,沒想到結果卻是這樣的.

這個結果的確讓人始料未及.我使用了是貪婪匹配.不應該僅僅匹配第二行才對嘛.

其實這裡存在乙個問題.正規表示式的原則是匹配.所有其它原則都是建立在這個基礎上面的.所以我們可以看一下第三是否匹配.答案是匹配.且僅有這一種匹配情形.

既然只有一種匹配情形,就談不上非貪婪了.所謂非貪婪,是建立在匹配的基礎上面的.

明確了問題,我們想想該怎麼解決這個問題呢.

/使用上面這段作為正規表示式進行匹配,就可以達到預期的目的.因為限定了""之間最短匹配的內容之中不能有"

這一次對於正規表示式的使用經歷還是之前沒有過的.完全不懂得怎麼分析這個問題,不過好在得到了前輩的指導.不僅解決了這個問題.也理解了這個問題.希望這篇心得可以幫助到你.

正規表示式 非貪婪匹配

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

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

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

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

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