POSIX BRE和ERE的metacharacters(元字符)
来源:互联网 发布:java调用nodejs程序 编辑:程序博客网 时间:2024/05/22 10:34
转自:http://blog.csdn.net/a627088424/article/details/15435873
从根本上来看,正则表达式是由两个基本组成部分所建立:一般字符与特殊字符。一般字符指的是任何没有特殊意义的字符。在某些情况下,特殊特殊字符也可以视为一般字符。特殊字符称为元字符(metacharacter)。
BRE:基本正则表达式(Basic Regular Expression)
ERE:扩展的正则表达式(Extended Regular Expression)
POSIX BRE与ERE的meta字符
字符
BRE/ERE
模式含义
\
两者都可
通常可以关闭后续字符的特殊含义。有时则是相反的打开特殊含义,例如:\(...)\与\{...\}。
.
两者都可
匹配任意单个字符,但NUL除外。独立程序也可以不允许匹配换行字符。
*
两者都可
匹配在它之前的任何数目(或没有)的单个字符。
ERE:此前置字符可以是正则表达式,例如:因为.号表示任意字符,所以.*表示“匹配任一字符的任意长度”。
BRE:*若置与正则表达式的第一个字符,不具任何特殊意义。
tol.toy 匹配不到toltoy,而tol.*toy可以。
^
两者都可
BRE:仅在正则表达式的开头具有特殊意义,像^abc表示以abc开头的行,而a^b中则表示^本身字面意思。
ERE:置于任何位置都有特殊意义,像ab^cd这样的正则表达式是有效的,只是无法匹配到任何内容,因为^前置了文本,会让其无法匹配到“字符串的开始”。
$
两者都可
BRE:仅在正则表达式的结尾具有特殊意义,像abc^表示以abc结尾的行,而a^b中则表示^本身字面意思。
ERE:置于任何位置都有特殊意义,像ab$cd这样的正则表达式是有效的,只是无法匹配到任何内容,因为$后置了文本,会让其无法匹配到“字符串的结尾”。
[...]
两者都可
方括号表达式,匹配方括号内的任一字符。
连字符(-)指的是字符范围。
^符号置于方括号里的第一个字符时,具有反向意义:指的是不在方括号内的任何字符。
作为首字符的一个连字符或结束方括号(]),则被视为列表的一部分。所有其他的meta字符也为列表中的一部分(也就是表示其字面意思,而不具有特殊意义)。
方括号表达式里可能会含有排序字符,等价字符以及字符集。
\{n,m\}
BRE
匹配在它前面的单个字符重现相应次数的行。
\{n\}指重现n次。\{n,\}则为至少重现n次。而 \{n,m\}为重现n到m次。n与m的值必须介于0到RE_DUP_MAX(含)之间,后者最小值为255。RE_DUP_MAX是POSIX定义的符号型常数,且可以通过getconf命令取得。它的最小值为255,不过部分系统允许更大值,如GNU/Linux为32767.
BRE
将\(与\)间的模式存储在特殊的“保留空间”。最多可以将9个独立的子模式存储早单个模式中。匹配于子模式的文本,可以通过转义序列\1至\9,被重复使用在相同的模式里。例如:
\n
BRE
重复在\(与\)方括号内第n个子模式至此点的模式。n为1至9的数字,1为由左开始。
{n,m}
ERE
与先前提及BRE的 \{n,m\}一样,只不过没有反斜杠。
+
ERE
匹配前面正则表达式的一个或多个实例。例:ab+c,表示中间有至少有一个b,等同于abb*c。
?
ERE
匹配前面正则表达式的零个或一个实例。例:ab?c匹配的有ac与abc,就这两个。而ab*c,后者匹配中间有任意个b。
|
ERE
匹配|符号前面或后面的表达式。
( )
ERE
匹配于方括号括起来的正则表达式群。组合。
利用它可以构建复杂而灵活的正则表达式。
例:[Tt]he (CPU|computer) is
例:read|write+指的是正好一个read,或write后面接着任意个数个e字符,比较有使用的模式应该是(read|write)+,值的是有一个read或重现多个read,或则一个write或重现多个write。
例:(read|write)+所指的字符串间不能有空白。((read|write)[[:space:]]*)+则是用以匹配多个连续出现的read或是write,且中间可能被空格隔开。
POSIX的方括号表达式:
为配合非英语环境,POSIX标准强化其字符集范围的能力。[a-z]表示a到z的小写英文,而法文è是字母字符,但是却不在[a-z]中。有例如,在Czech与Spanish语系下,ch两个字符会保持连续状态,在匹配时会被视为单个独立单位。
POSIX也在术语上做了变动,早先看到的[]称为字符集(character class),在POSIX标准下,现在叫括号表达式(bracket expression)。对原先进行了扩充。
另有额外的组成部分。
包括:
字符集(Character class)
以[:与:]将关键字组合起来的POSIX字符集。关键字表示各种不同的字符集。
排序符号(Collating symbol)
排序符号指将多个字符序列视为一个单位。使用[.与.]将字符组合起来。排序符号在系统所使用的特定locale上各有其定义。
等价字符集(Equivalence class)
等价字符集列出的是应十二位等值的一组字符,例如e与è。它由取自于locale的名字元素组成,以[=与=]括住。
这三种构造都必须使用方括号表达式。例如[[:alpha:]!]匹配任一英文字母字符或惊叹号(!);而[[.ch.]]则匹配于ch,而不是字母c或h。在法文French的locale里,[[=e=]]可能匹配于e,é,è,ê,ë。
需要注意写法,像[:alpha:]这样,是匹配:,a,l,p,h,a,,表示匹配英文字母的正确写法应为[[:alpha:]]。要让]进入集合中,必须将它放在列表前,如:[]*\.]。要让减号-进入该集合,也请将它放在列表最前端。要让他两同时进入列表,请将右方括号放在第一个字符,减号放到最后一个字符,如[]*\.-]
POSIX字符集:
类别
匹配字符
[:alnum:]
数字字符
[:alpha:]
字母字符
[:blank:]
空格(space)与定位符(tab)
[:cntrl:]
控制字符
[:digit:]
数字字符
[:graph:]
非空格字符(nonspace)
[:lower:]
小写字母字符
[:print:]
可显示字符
[:punct:]
标点符号字符
[:space:]
空白字符
[:upper:]
大写字母字符
[:xdigit:]
十六进制数字
最后,POSIX明确陈述:NUL字符(数值的零)不需要时刻匹配的。这个字符在C语言里是用来指出字符串结尾,而POSIX标准则希望让它是直接了当的,通过正规C字符串的使用实现其功能。除此之外,另有其他个别的工具程序不允许使用.(点号)meta字符或方括号表达式来进行换行字符匹配。
连字符依然可以用
[0-9a-fA-F]可以表示十六进制数字[0123456789abcdefABCDEF]
[0-9]表示[0123456789]
....
[^]不是有效的正则表达式。可以这样匹配^,[\ ^]
BRE运算符优先级
由高到底:
[..] [==] [::] 用于字符排序的方括号表达式
\metacharacter 转义的mera字符
[] 方括号表达式
* \{ \} 前置单个字符重现的正则表达式
无符号(no symbol) 连续
^ $ 锚点(Anchors)
ERE运算符优先级
[..] [==] [::] 用于字符排序的方括号表达式
\metacharacter 转义的mera字符
[] 方括号表达式
( ) 分组
* + ? {} 重复前置的表达式
无符号(no symbol) 连续
^ $ 锚点(Anchors)
| 交替(Alternation)
正则表达式的扩展
很多程序提供正则表达式语法扩展。这类扩展大多采用取反斜杠加一个字符,以形成新的运算法。最常见的扩展为\<和\>运算法。表示匹配单词的开头和结尾。对用正则表达式的扩展,请查看手册页。
额外的GNU正则表达式运算符
运算法
含义
\w
匹配任何单词组成字符,等同于[[:alnum:]_]
\W
匹配任何单词组成字符,等同于[^[:alnum:]_]
\< \>
如前所述
\b
匹配单词的起始或结尾处所找到的空字符串。这是\<与\>的结合。主要以awk使用\b表示后退字符,因此GNU awk(gawk)使用\y表示此功能。
\B
匹配两个单词组成字符之间的空字符串
\’ \`
分别匹配emacs缓冲区的开始和结尾。GNU程序(还有emacs)通常将它们视为与^及$同义
POSIX表示NUL无需匹配,但GNU程序则没有限制。如NUL字符出现在输入数据里,则可以通过.字符或方括号表达式来匹配。
- POSIX BRE和ERE的metacharacters(元字符)
- POSIX BRE和ERE的metacharacters(元字符)
- POSIX 正则表达式 BRE 与 ERE的区别
- BRE与ERE的异同
- BRE与ERE的区别
- BRE与ERE的差异
- globbing、ERE、BRE的比较
- BRE与ERE的差异
- 正则表达式 BRE 与 ERE的区别
- grep BRE ERE
- 从BRE 与 ERE的文法看两者的异同
- 正则表达式之BRE与ERE字符集
- shell 笔记 特殊变量 特殊字符 Metacharacters
- ere
- ere
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- java正则表达式中的POSIX 字符类和Unicode 块和类别的类介绍
- 常用的元字符
- Triangle
- 闭包
- 数组
- kali linux 2.0 AMD x64安装
- Java在Web开发语言上败给了PHP
- POSIX BRE和ERE的metacharacters(元字符)
- 《聪明的投资者》读书笔记1
- LeetCode Plus One
- 2015 ACM/ICPC Asia Regional Hefei Online
- webrtc回音消除算法的delay值说明
- 数据结构 PAT 01-复杂度1 最大子列和问题
- 学习记录-Qt文件的读写和删除等操作
- 函数多层执行
- DOM一些知识点