【Linux学习】正则表达式学习记录


正则表达式

位置标记

  • ^ (匹配行首)
  • $ (匹配行尾)

标识符

  • . (匹配任意字符)
  • [] (匹配中括号内的任意单个字符)
  • [^] (不匹配中括号内的任意单个字符)

数量修饰符

  • ? (匹配0或1次)
  • + (匹配1或多次)
  • * (匹配0或多次)
  • {n} (匹配之前的项n次)
  • {n,} (至少匹配之前的项n次)
  • {n,m} (至少匹配之前的项n次,至多匹配m次)

捕获元和非捕获元, 用于操作某个匹配中的一部分内容

  • () (捕获括号内的内容并缓存,通过$0-$9来进行调用)
  • (?:\) (非捕获元)
  • (?=) (匹配后边等于xxx的XXX)
  • (?<=) (匹配前边等于xxx的XXX)
  • (?!) (匹配后边不等于xxx的XXX)
  • (?<!) (匹配前边不等于xxx的XXX)

其他

  • () (将括号中的内容视为一个整体)
  • | (选择结构,可以匹配两边的任意一项(A|a), 不是所有语言的正则都支持该符号)
  • \ (转义字符,转义之后的一个字符)

正则式用例

( +[a-zA-Z]+[?,.]? +)                                   # 匹配任意单词
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}          # 匹配IP地址,仅匹配,不检查合法性
[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}    # 匹配IP地址,仅匹配,不检查合法性
(?:[Ww]indows).*        # 用于匹配任何windows型号中的"Windows"字符串
hello(?= world)         # 用于匹配后面是world单词的hello字符串
(?<=hello )world        # 用于匹配前面是hello单词的world字符串
hello(?! world)         # 用于匹配后面不是world单词的hello字符串
(?<!hello )world        # 用于匹配前面不是hello单词的world字符串

^\s*(?=\r?$)\n          # 匹配空行
  • 正则式引擎通常会选择最长匹配。
  • 可以匹配的文本,可以是管道的输出文件、或者命令行输入的字符串
  • 可视化正则表达式

扩展正则表达式

  1. grep 要加-P选项。
  2. Perl正则支持。要开启扩展正则表达式支持。
  • \d (等价于[0-9], 匹配数字)
  • \D (等价于[^0-9], 不匹配数字)
  • \b (匹配单词边界, 指单词和空格的位置)
  • \B (不匹配单词边界)
  • \s (匹配任何不可见字符,包括空格符、制表符、换页符等。等价于[\f\n\r\t\v])
  • \S (匹配任何可见字符。等价于[^\f\n\r\t\v])
  • \w (匹配包括下划线的任何单词字符。Unicode字符。)
  • \W (匹配任何非单词字符。)
  • \f (换页符, \x0C和\cL)
  • \n (换行符, \x0A和\cJ)
  • \r (回车符, \x0D和\cM)
  • \t (制表符, \x09和\cI) TODO:不确定是\cI还是\cl
  • \v (垂直制表符, \x0B和\cK)
  • \c[A-Za-z] (匹配一个控制字符)
  • \x[0-9A-F]{2} (匹配一个十六进制值,必须是两个数字长,0x00-0xFF)
  • \u[0-9A-F]{4} (匹配一个十六进制值,必须是4个数字长,0x0000-0xFFFF,Unicode字符)

\u00A9匹配版权符号

  • \n[0-7]+ (匹配一个八进制值)
  • \[1-9] (对获取匹配(xxx)的引用,如:"(.)\1"匹配两个连续相同的字符, 只有一条反斜杠,写两条是因为Markdown预览器做了转义)
  • \p[PLMZSNC] (匹配Unicode属性)
  • < (匹配单词的开始)
  • > (匹配单词的结束)

<the>可以匹配"on the table"中的"the",但是无法匹配"otherwise"中的"the"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值