正则表达式 2____元字符

本文介绍了正则表达式中的取非匹配、元字符及特殊用途,并通过实例讲解了如何匹配特定字符集、数字、字母及空白字符。此外,还讨论了如何在不同操作系统间转换路径格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式的字符集合通常用来指定一组必须匹配其中之一的字符,但有时需要反过来做,这就是

取非匹配  ,  用元字符 ^ 可以实现对一个字符集合进行取非匹配

一个示例

文本  sales1.xls  orders3.xls   sales2.xls    sales3.xls   apac1.xls   europe2.xls    sam.xls   na1.xls   na2.xls  sa1.xls   ca1.xls 

正则表达式  [ns]a[^0-9]\.xls

结果  只有  sam.xls

这里[^0-9]  匹配的是任何不是数字的字符, ^的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于紧跟在 ^ 字符后面的那一个字符或字符区间

 下面介绍元字符,先看一个简单的例子

原始文本是一个包含着反斜杠(\)字符的文件路径(用于DOS和Windows 路径),现在想在Linux或Unix 系统中使用这个系统,也就是说要把路径中的反斜杠\ 全部替换为正斜杠/

文本     \home\ben\sales\

正则表达式  \\

结果   \home\ben\sales\

如果只写一个\作正则表达式,将会出错!  这是因为正则表达式分析器会认为你的正则表达式不完整,在一个完整的正则表达式里,字符\的后面永远跟着一个字符

一 匹配空白字符

在进行正则表达式搜索的时候,经常会遇到需要对原始文本里的非打印空白字符进行匹配的情况,以下列出特殊元字符

                                                                      空白元字符

——————————————————————————

   元字符                                                                           说明

______________________________________________________________________

                   [\b]                                                    回退(并删除)一个字符(Backspace键)

                    \f                                                                             换页符

                   \n                                                                            换行符

                   \r                                                                             回车符

                   \t                                                                              制表符

                  \v                                                                          垂直制表符

 看一个例子

文本  "101","Ben","Forta"

          "102","Jim","James"

          "103","Roberta","Robertson"

          "104","Bob","Bobson"

正则表达式  \r\n\r\n

结果  "101","Ben","Forta"

          "102","Jim","James"         

                                                           

           "103","Roberta","Robertson"

           "104","Bob","Bobson"

\r\n匹配一个"回车+换行"  组合,有许多操作系统(比如Windows) 都把这个组合做为文本行的结束标签

注:  \r\n 是Windows 所使用的文本行结束标签。Unix 和Linux系统只使用一个换行符来结束一个文本行;换句话说,在Unix/Linux系统上匹配空白行只使用\n\n即可,不需要加上\r.

同时适用于Windows  和 Unix\Linux 系统的正则表达式应该包含一个可选的  \r  和一个必须被匹配的 \n

 二 匹配特定的字符类别

字符集合(匹配多个字符中的某一个)是最常见的匹配形式,而一些常用的字符集合可以用特殊元字符来代替。这些元字符匹配的是某一类别的字符,称之为 字符类

以下列举几种基本的字符类

1  匹配数字(与非数字)

 ______________________________________________________

        元字符                                                             说明

        \d                                                        任何一个数字字符(等价于[0-9])

        \D                                                        任何一个非数字字符(等价于[^0-9])

  ______________________________________________________

\d 是[0-9]的简写形式,[0-9] 又是[0123456789]的简写形式

2 匹配字母与数字

字母和数字,A-Z(不分大小写),0-9,下划线_是一种常用的字符集合,常用于各种文件名、目录名、变量名、数据库对象名等

                                                                 字母数字元字符

____________________________________________________________

元字符                                                                        说  明

\w                              任何一个字母数字字符(大小写均可) 或下划线字符,等价于[a-zA-Z0-9_]

\W                            任何一个非字母数字或非下划线字符,等价于[^a-zA-Z0-9_]

____________________________________________________________

3 匹配空白字符与非空白字符

                                        空白字符元字符

____________________________________________________________

        元字符                                                                        说明

             \s                                     任何一个空白字符,  等价于[\f\n\r\t\v]

             \S                                     任何一个非空白字符, 等价于[^\f\n\r\t\v]

注意:  用来匹配退格字符的[\b] 元字符是一个特例:  它不在类元字符\s 的范围,当然也没有被排除在类元字符\S的范围外

4   匹配十六进制或八进制数值

   a  十六进制,在正则表达式里,十六进制要用前缀\x 表示 ,如 \x0A对应ASCII字符10(换行符), 其效果等价于\n

   b   八进制要用前缀\0表示, 如\011对应ASCII 字符9(制表符), 等价于\t

 5  使用POSIX 字符类

________________________________________________________________

        字符类                                                                                    说  明

      [:alnum:]                                                            任何一个字母或数字,等价于[a-zA-Z0-9]

      [:alpha:]                                                            任何一个字母,等价于[a-zA-Z]

      [:blank:]                                                            空格或制表符,等价于[\t ]

      [:cntrl:]                                                               ASCII 控制字符,(ASCII 0 到 31,再加上ASCII 127)

     [:digit:]                                                                 任何一个数字,等价于[0-9]

     [:graph:]                                                               和[:print:]一样,但不包括空格

     [:lower:]                                                            任何一个小写字母,  等价于[a-z]

     [:print:]                                                            任何一个可打印字符

     [:punct:]                                                            既不属于[:alnum:]也不属于[:cntrl:]的任何一个字符

     [:space:]                                                            任何一个空白字符, 包括空格(等价于[^\f\n\r\t\v]

     [:upper:]                                                            任何一个大写字母(等价于[A-Z])

     [:xdigit:]                                                              任何一个十六进制数字(等价于[a-fA-F0-9])

下面一个示例,演示POSIX字符类的用法,利用正则表达式从一段HTML代码里把RGB值查找出来

<body bgcolor="#336633" text="#FFFFFF"   marginwidth="0"  marginheight="0"   topmargin="0"  leftmargin="0">

正则表达式 #[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]

结果 <body bgcolor="#336633" text="#FFFFFF"   marginwidth="0"  marginheight="0"   topmargin="0"  leftmargin="0">

注意:  使用POSIX 字符类必须以[[开头,]]结束( 两对方括号),POSIX 必须在[:和:]之间, 外层的[和]用来定义一个字符集合,内层的[和]字符是POSIX字符类本身的组成部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值