标签:shell


正则表达式非贪婪匹配


我们学习正则时,用到过贪婪匹配.*
其实,还有一个相对的概念,叫做非贪婪匹配。

如:str=”abcaxc”
  p=”a.*c”
  
贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc。
  
非贪婪匹配:就是匹配到结果就好,最少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(a.*c)。

shell中如何区分两种模式?

默认是贪婪模式;
在量词后面直接加上一个问号?就是非贪婪模式。

常用的量词有:

{m,n}: m到n个
*: 任意多个
+: 一个到多个
?: 0或一个

示例:

str=”123abc0axc456″
echo $str|grep ‘a.*c’
结果: 123abc0axc456

echo $str|grep -P ‘a.*?c’
结果: 123abc0axc456