linux 中 正则表达式* 和 ?

 

a、

正则表达式的类型

使用正则表达式最大的问题在于有不止一种类型的正则表达式。Linux 中的不同应用程序可能会用不同类型的正则表达式。这其中包括编程语言(Java、Perl 和 Python)、Linux 实用工具(比如 sed 编辑器、gawk 程序和 grep 工具)以及主流应用(比如 MySQL 和 PostgreSQL 数据库服务器)。

正则表达式是通过正则表达式引擎(regular expression engine)实现的。正则表达式引擎是一套底层软件,负责解释正则表达式模式并使用这些模式进行文本匹配。在 Linux 中,有两种流行的正则表达式引擎

  • POSIX 基础正则表达式(basic regular expression,BRE)引擎

  • POSIX 扩展正则表达式(extended regular expression,ERE)引擎

大多数 Linux 工具都至少符合 POSIX BRE 引擎规范,能够识别该规范定义的所有模式符号。遗憾的是,有些工具(比如 sed 编辑器)只符合了 BRE 引擎规范的子集。这是出于速度方面的考虑导致的,因为 sed 编辑器希望能尽可能快地处理数据流中的文本。

POSIX BRE 引擎通常出现在依赖正则表达式进行文本过滤的编程语言中。它为常见模式提供了高级模式符号和特殊符号,比如匹配数字、单词以及按字母排序的字符。gawk 程序用 ERE 引擎来处理它的正则表达式模式

由于实现正则表达式的方法太多,很难用一个简洁的描述来涵盖所有可能的正则表达式

 

* 表示匹配前一个字符0次或者多次;

?表示匹配前一个字符0次或者1次, 且只在扩展正则表达式中生效。

 

001、

root@DESKTOP-IDT9S0E:/home/test# echo "ik" | grep "ie?k"
root@DESKTOP-IDT9S0E:/home/test# echo "ik" | sed -n '/ie*k/p'  ## *表示匹配0次或者多次
ik
root@DESKTOP-IDT9S0E:/home/test# echo "ik" | grep "ie*k"     ## *表示匹配0次或者多次
ik
root@DESKTOP-IDT9S0E:/home/test# echo "ik" | grep "ie?k"
root@DESKTOP-IDT9S0E:/home/test# echo "ik" | grep -E "ie?k"  ## ?表示匹配0次或者1次,且扩展正则
ik

 

002、

root@DESKTOP-IDT9S0E:/home/test# echo "ieeeek" | sed -n '/ie*k/p'  ## *号表示匹配0次或者多次
ieeeek
root@DESKTOP-IDT9S0E:/home/test# echo "ieeeek" | grep "ie*k"
ieeeek
root@DESKTOP-IDT9S0E:/home/test# echo "ieeeek" | grep -E "ie?k"   ## ?表示匹配0次或者1次
root@DESKTOP-IDT9S0E:/home/test# echo "ik" | grep -E "ie?k"       
ik
root@DESKTOP-IDT9S0E:/home/test# echo "iek" | grep -E "ie?k"
iek
root@DESKTOP-IDT9S0E:/home/test# echo "ieek" | grep -E "ie?k"

 

003、

root@DESKTOP-IDT9S0E:/home/test# echo "baeeaeeat" | sed -n '/b[ae]*t/p'
baeeaeeat
root@DESKTOP-IDT9S0E:/home/test# echo "baakeeet" | sed -n '/b[ae]*t/p'

 

只要 a 和 e 字符以任何组合形式出现在 b 和 t 字符之间(就算完全不出现也行),模式就能够匹配。如果出现了字符组之外的字符,该模式匹配就会不成立

 

来源: https://mp.weixin.qq.com/s?__biz=MzUxMjEyNDgyNw==&mid=2247513225&idx=1&sn=0b4119aa05476f6f25a1603dd0b46269&chksm=f96bc67dce1c4f6bd989697ea7d0df177e9e49377b3e5839e6902f5f0c7a9bd5de4c3f9d0a67&mpshare=1&scene=23&srcid=0510LQZpQrkaE3X3MuCgBeUT&sharer_sharetime=1683650310883&sharer_shareid=50b75c6a886e09824b582fb782a7678b#rd

 

posted @ 2023-05-11 09:14  小鲨鱼2018  阅读(83)  评论(0编辑  收藏  举报