高级正则表达式

1.正则表达模式可能有多层结构,其基本单位称为原子。


 正则表达式模式种接受的特殊字符
字符 说明
        .
匹配任意单个字符
       ^
指定与输入字符串的开头进行匹配
       $
指定与输入字符串的结尾进行匹配
     \m
指定与单词的开头进行匹配
      \M
指定与单词的结尾进行匹配
       \k
匹配非字母也非数字的字符k(如\.匹配句点符号)
      \c
当c是字母或数字时,用c替换\c
[chars]
与chars中的任意单个字符匹配。
如果chars中的第一个字符是^,那么就是反转范围,只与不含 ^ 到 ] 之间的字符串匹配。
a-b表示a到b的所有字符(包括a、b)。
如果chars中的第一个字符是 ] ,它会被作为文本处理(而不是终止符).
如果 ~ 出现在chars的第一个或最后一个,它会被作为文本处理。
   (regexp)  
匹配正则表达式regexp,用于分组或识别匹配的子字符串
      * 与由0个或多个前述的原子组成的序列匹配
      + 与由一个或多个前述的原子组成的序列匹配
     ? 与空字符串或前述的一个原子匹配
     {m} 匹配与前述原子正好匹配m次的序列
     {m,} 匹配与前述原子至少匹配m次的序列
   {m,n} 匹配与前述原子至少匹配m次的序列,最多匹配n次的序列
 re1|re2|...  与任意一个指定正则表达式匹配。

2.在用方括号表示的范围中,还可以使用“字符类型”来代表一种类型的全部字符。可以联合使用明确规定的字符与一个或多个字符类型。

正则表达式中的字符类型
     类型 说明
   [:alpha:] 字母
   [:alnum:] 字母和数字
   [:blank:] 空格和制表符
   [:cntrl:] 控制字符
   [:digit:] 十进制字符
   [:graph:] 图形字符,有对应的可视表现形式的字符,
如数字、字母字符或标点字符
   [:lower:] 小写字符
   [:print:] 可打印字符,包括[:graph:]类型中的全部字符
再加上空白字符
   [:punct:] 标点字符
   [:space:] 空白字符
   [:upper:] 大写字母
   [:xdigit:] 十六进制数字

3.为了编写方便,还可以使用下表列出的转义字符作为字符类型的简写。注意\w和它的反转\W转义序列在定义时都把下划线_视为字母字符之一。

正则表达式中字符类型的转义序列
转义序列 表示的类型
\d [[:digit:]]
\D [^[:digit:]]
\s [[:space:]]
\S [^[:space:]]
\w [[:alnum:]_]
\W [^[:alnum:]_]

4.操作符*、+、?被称为 量词,可以跟在原子后面,用来指定它的重复字数。另一组量词{m}{m,}{m,n},被称为边界。

5.当一个正则表达式可以与给出的字符串中的多个子字符串匹配时,正则表达式与字符串中最先开始的自表达式匹配。正则表达式的量词设置默认为“贪婪”,即与尽可能多的字符串进行匹配。任意量词都可以在后面跟一个?,将其设置为非贪婪,从而与尽可能短的子字符串进行匹配。

6.在Tcl中,不能在一个正则表达式中混合使用贪婪和非贪婪模式,整个正则表达式的引用模式由表达式中的第一个量词确定。

7.逆向引用:在一个正则表达式中,逆向引用匹配与前一个子表达式相同的字符集。逆向引用的语法是在\后面跟一个前面的子表达式的编号。子表达式依据它们的左括号进行编号。

8.非捕获子表达式,格式为(?:expression)。优点是处理速度更快,缺点是不能逆向引用,不能解析(与非捕获子表达式匹配的子字符串不能作为独立的匹配变量取出)。
9.regexp 命令格式: regexp {正则表达式模式} string (arg1 arg2 ...),可选参数会被作为变量名对待,第一个变量会存入与整个正则表达式匹配的子字符串,第二个变量会存入与捕获到的第一个子表达式相匹配的子字符串,以此类推。如果变量名的数量比捕获到的子表达式数量多,多余的变量会被设置为空字符串。这种取得部分配对的子字符串的能力使regexp可以用于解析工作。

10.可以在正则表达式前卫regexp指定更多的选项。 -start index指定regexp从该位置开始查找匹配。 -all 会在字符串中查找尽量多次的匹配,并返回总的匹配次数。 -nocase 指定查找匹配时不区分大小写。 -indices 指明额外的变量不应该用于存放匹配的子字符串的值,而是存放给出子字符串范围的首字符和尾字符的索引列表。 -inline 指定返回一个数据列表。-line 激活区分换行的匹配。指定这个选项后,[^括号表达式和 . 绝不会与新行匹配,^原子除了它的普通功能外,与新行后的空字符串匹配。$原子除了它的普通功能外,与新行前的空字符串匹配。

11.regexp 命令支持 -- 选项明确地标志选项结束。建议这么做,否则如果正则表达式模式以 - 字符开头,它可能被错误地解析为另一个选项。

12.使用 regsub 命令,正则表达式也可以用于替换。格式为:regsub (选项) 正则表达式模式 替换字符串 (变量名)。如果替换字符串中包含&或\0,其中的&或\0会被替换为与正则表达式相匹配的子字符串。如果是 \n 形式的序列出现在置换字符串中(n是一个十进制数),与第n个捕获的子表达式相匹配的子字符串会替换掉这个\n。






你可能感兴趣的:(高级正则表达式)