正则表达式 - 语法正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等 。
- 列目录时,dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的 。
- 构造正则表达式的方法和创建数学表达式的方法一样 。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式 。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合 。
普通字符普通字符包括没有显式指定为元字符的所有可打印和不可打印字符 。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号 。
非打印字符非打印字符也可以是正则表达式的组成部分 。下表列出了表示非打印字符的转义序列:
字符描述cx匹配由x指明的控制字符 。例如,cM 匹配一个 Control-M 或回车符 。x 的值必须为 A-Z 或 a-z 之一 。否则,将 c 视为一个原义的 'c' 字符 。f匹配一个换页符 。等价于 \x0c 和 cL 。n匹配一个换行符 。等价于 \x0a 和 cJ 。r匹配一个回车符 。等价于 \x0d 和 cM 。s匹配任何空白字符,包括空格、制表符、换页符等等 。等价于 [ fnrtv] 。S匹配任何非空白字符 。等价于 [^ fnrtv] 。t匹配一个制表符 。等价于 \x09 和 cI 。v匹配一个垂直制表符 。等价于 \x0b 和 cK 。
特殊字符所谓特殊字符,就是一些有特殊含义的字符,如上面说的"*.txt"中的*,简单的说就是表示任何字符串的意思 。如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个 。ls *.txt 。
许多元字符要求在试图匹配它们时特别对待 。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符 () 放在它们前面 。下表列出了正则表达式中的特殊字符:
特别字符描述$匹配输入字符串的结尾位置 。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 'n' 或 'r' 。要匹配 $ 字符本身,请使用 $ 。( )标记一个子表达式的开始和结束位置 。子表达式可以获取供以后使用 。要匹配这些字符,请使用 ( 和 ) 。*匹配前面的子表达式零次或多次 。要匹配 * 字符,请使用 * 。+匹配前面的子表达式一次或多次 。要匹配 + 字符,请使用 + 。.匹配除换行符 n之外的任何单字符 。要匹配 .,请使用。[标记一个中括号表达式的开始 。要匹配 [,请使用 [ 。?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符 。要匹配 ? 字符,请使用 ? 。将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符 。例如,'n' 匹配字符 'n' 。'n' 匹配换行符 。序列 '\' 匹配 "",而 '(' 则匹配 "(" 。^匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合 。要匹配 ^ 字符本身,请使用 ^ 。{标记限定符表达式的开始 。要匹配 {,请使用 { 。|指明两项之间的一个选择 。要匹配 |,请使用 | 。
限定符限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配 。有*或+或?或{n}或{n,}或{n,m}共6种 。
正则表达式的限定符有:
字符描述*匹配前面的子表达式零次或多次 。例如,zo* 能匹配 "z" 以及 "zoo" 。* 等价于{0,} 。+匹配前面的子表达式一次或多次 。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z" 。+ 等价于 {1,} 。?匹配前面的子表达式零次或一次 。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do"。? 等价于 {0,1} 。{n}n 是一个非负整数 。匹配确定的 n 次 。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o 。{n,}n 是一个非负整数 。至少匹配n 次 。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o 。'o{1,}' 等价于 'o+' 。'o{0,}' 则等价于 'o*' 。{n,m}m 和 n 均为非负整数,其中n <= m 。最少匹配 n 次且最多匹配 m 次 。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o 。'o{0,1}' 等价于 'o?' 。请注意在逗号和两个数之间不能有空格 。
推荐阅读
- Python 如何传递运算表达式?
- Struts2漏洞系列之「S2-045」上传数据异常导致的OGNL表达式执行
- 冻顶乌龙如何冲泡,台湾–冻顶乌龙
- HTML背景色教程–如何更改Div背景色,并通过代码示例进行了说明
- 不同颜色的硬盘到底什么区别 – 蓝盘、黑盘、红盘、紫盘、金盘
- Java回调的四种写法:反射+直接调用+接口调用+Lambda表达式
- 前端正则表达式书写以及常用的方法
- Linux shell 逻辑运算符、逻辑表达式详解
- 一次记住js的6个正则方法
- 花了三天时间,终于把网络爬虫和正则表达式做了个总结