POSIX正则表达式规范

参考:http://en.wikipedia.org/wiki/Regular_expression

  POSIX正则表达式分为Basic Regular Expressions 和 Extended Regular Expressions。

  ERE增加支持?,+和|,去除了通配符()和{}。而且POSIX正则表达式的标准语法经常坚持使用附加的语法来支持特殊应用。虽然POSIX.2没有实现一些具体的细节,BRE和ERE提供被很多工具使用的标准。

  BRE要求通配符()和{}写成和\{\},ERE中无需这样。

基本通配符

通配符

描述

.

匹配任何一个单字符(许多应用不包括换行符,但是假设包括换行符也是安全的)。在大中小括号中,该通配符只匹配字符’.’,例如,a.c匹配”abc”,但是[a.c]只匹配”a”或”.”或”c”。要匹配’.’不能使用’\.’,因为’\.’的作用与’.’一样,应该使用’[.]’来匹配”a.c”中的点。

[]

只匹配中括号内的一个字符。例如[abc]匹配”a”或”b”或”c”。[a-z]匹配小写的”a”到”z”。这些格式可以混合使用:[abcx-z]匹配”a”,”b”,”c”,”x”,”y”,”z”与[a-cx-z]的效果相同。

‘-’如果出现在[]的开头或结尾,表示匹配字符’-’,例如[^-abc],[-abc] ,[abc-]。注意不能使用’\’。

‘]’可以出现在中括号中的第一个位置,例如[]abc]或[^]abc]

[^ ]

匹配单个字符,该字符不能包含在中括号中。例如,[^abc]匹配任何除’a’,’b’,’c’外的字符。[^a-z]匹配任何除’a’-‘z’的字符。同理,字符与范围标识可以混合使用,例如,[^a-cx-z]。

^

匹配字符串的开头。在基于行的工具中,匹配每一行的开头。

$

匹配字符串的结尾或者换行符的前一个位置。在基于行的工具中,匹配每一行的结尾。

()

定义一个子表达式。圆括号在整体匹配完后进行匹配。子表达式也叫做块或组。

BRE模式需要写成

\n

匹配第n(1<=n<=9)个子表达式。POSIX.2对该通配符的定义很模糊,有的工具允许引用大于9的子表达式。

*

匹配前一个元素0次或多次。例如,ab*c匹配”ac”,”abc”,”abbbbbc”等。[xyz]*匹配””,”x”,”y”,”z”,”zx”,”zyx”,”xyzzy”等。(ab)*匹配””,”ab”,”abab”等。

{m,n}

匹配前一个元素至少m次,至多n次。例如,a{3,5}匹配”aaa”,”aaaa”,”aaaaa”。

BRE模式需要写成\{m,n\}

 

举例

.at

匹配任何以”at”结尾长度为3的字符串,例如” at”,”aat”,”cat”等

[hc]at

匹配”hat”和”cat”

[^b]at

除了”bat”,匹配任何以”at”结尾长度为3的字符串。例如,”aat”,”cat”等

[^hc]at

除了”hat”和”cat”,匹配任何以”at”结尾长度为3的字符串。例如,”aat”,”tat”等

^[hc]at

匹配任何以”hat”或”cat”开头的字符串或行

[hc]at$

匹配任何以”hat”或”cat”结尾的字符串或行

.

匹配任何三个字符,第一个和第三个字符必须分别为”[”,”]”,因为”\[”和”\[”是经过转义,例如”[a]”,”[b]”

s.*

匹配任何以”s”开头的字符串,例如”swa”,”seed”

Extended Regular Expressions

在ERE中,反斜杠’\’用来对通配符进行转义,所以BRE中的’\(’和’\)’在ERE中改为’(’和’)’,’\{’和’\}’改为’{’和’}’。 ERE移除了’\n’通配符,并添加了如下通配符。

通配符

描述

?

匹配前一个元素0次或1次。例如,ab?c匹配”ac”,”abc”。

+

匹配前一个元素1次或多次。例如,ab+c匹配”abc”,”abbc”等,但是不能匹配”ac”。

|

匹配前一个表达式或后一个表达式。例如,abc|def匹配”abc”,”def”。

 

举例

[hc]+at

匹配”hat”,”cat”,”hhat”,”ccat”等,但是不匹配”at”

[hc]?at

匹配”hat”,”cat”,”at”

[hc]*at

匹配”at”,”hat”,”cat”,”hcat”等

cat|dog

匹配”cat”,”dog”

Character classes

character class 是除了字面匹配最基本的正则表达式。它是很小的字符序列匹配更大的字符序列。例如,[A-Z]可以表示字母表,\d表示任意数字。character class应用于BRE和ERE。

当使用范围通配符时,例如[a-z]。计算机本地设置决定了字符编码的顺序。计算机可能按a-z的顺序来存储,或者abc…zABC…Z,或者aAbBcC…zZ的顺序。所以POSIX定义了character class,正则表达式的处理器可以正确解析该character class。

POSIX

ASCII

描述

[:alnum:]

[A-Za-z0-9]

数字和字母字符

[:alpha:]

[A-Za-z]

字母字符

[:blank:]

[ \t]

空格和TAB

[:cntrl:]

[\x00-\x1F\x7F]

控制符

[:digit:]

[0-9]

数字

[:graph:]

[\x21-\x7E]

可视字符

[:lower:]

[a-z]

小写字母字符

[:print:]

[\x20-\x7E]

可视字符和空格

[:punct:]

[][!"#$%&'()*+,./:;<=>?@\^_`{|}~-]

标点符号

[:space:]

[ \t\r\n\v\f]

空白字符

[:upper:]

[A-Z]

大写字母字符

[:xdigit:]

[A-Fa-f0-9]

十六进制字符

POSIX定义的character class只能在中括号内使用。例如,[[:upper:]ab]匹配大写字母字符和”a”,”b”。

[:word:]是附加的非POSIX的character class,[:word:]表示[:alnum:]和下划线。这表明在很多编程语言中,这些通配符可能是标识符。

POSIX正则表达式的更多相关文章

  1. posix正则表达式说明

    转载自:http://baiy.cn/utils/_regex_doc/index.htm 正则表达式说明 简介 大体来讲,正则表达式的文法分为3种标准:BRE.ERE 和 ARE.其中 BER 和 ...

  2. POSIX 正则表达式 BRE与ERE的差异

    BRE,标准正则表达式,basic regular expressions ERE,扩展正则表达式,Extended Regular Expressions POSIX 正则表达式 传统上,POSIX ...

  3. ORACLE中的支持正则表达式的函数

    ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBS ...

  4. 从零开始攻略PHP(5)——字符串操作与POSIX正则

    一.字符串操作 1.字符串的格式化 1.1 干掉空格 trim()函数可以除去字符串开始位置和结束位置的空格,并将结果字符串返回. ltrim()函数可以除去字符串开始位置的空格. rtrim()函数 ...

  5. oracle 10g正则表达式 REGEXP_LIKE 用法

    ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBS ...

  6. Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace

    Oracle正则表达式函数:regexp_like.regexp_substr.regexp_instr.regexp_replace   --去掉所有特殊字符,只剩字母  SELECT REGEXP ...

  7. oracle的正则表达式

    阅读目录 1.oracle(regular expression)简单介绍 2.oracle正则特殊字符 3.oracle正则字符簇 4.各种操作符的运算优先级 5.模拟测试例子 6.oracle对应 ...

  8. oracle 判断是否数字 正则表达式法

     SELECT '-100'    FROM dual   WHERE REGEXP_LIKE('-100','(^[+-]?\d{0,}\.?\d{0,}$)'); REGEXP_LIKE 用法: ...

  9. PHP 正则表达式总结

    可以用字符作为一个通配符来代替除换行符(\n)之外的任一个字符.例如,正则表达式:.at可以与"cat"."sat"."#at"和" ...

随机推荐

  1. HTML5 <video> - 使用 DOM 进行控制

    HTML5 <video> 元素同样拥有方法.属性和事件. 其中的方法用于播放.暂停以及加载等.其中的属性(比如时长.音量等)可以被读取或设置.其中的 DOM 事件能够通知您,比方说,&l ...

  2. 类似qq的左滑菜单栏简单实现

    代码托管到了Github https://github.com/cyuanyang/YYSlideView 主演实现代码: 1.滑动的viewController的初始化主要view -(instan ...

  3. Javascript轮播 支持平滑和渐隐两种效果(可以只有两张图)

    先上两种轮播效果:渐隐和移动   效果一:渐隐 1 2 3 4 效果二:移动 1 2 3 4 接下来,我们来大致说下整个轮播的思路: 一.先来看简单的,移动的,先上来一个图----移动效果图: 说明: ...

  4. UE4 中Struct Emum 类型的定义方式 笔记

    UE4 基础,但是不经常用总是忘记,做个笔记加深记忆: 图方便就随便贴一个项目中的STRUCT和 Enum 的.h 文件 Note:虽然USTRUCT可以定义函数,但是不能加UFUNCTION 标签喔 ...

  5. Uncaught ReferenceError: WebForm_DoPostBackWithOptions is not defined

    环境:Asp.Net网站,Framework版本4.0,IIS版本7.0问题:按钮失效,下面是按钮代码: <a id="dnn_ctr1161_Login_Login_DNN_cmdL ...

  6. SharePoint 2013配置 Workflow Manager

    折腾了好几天,用Windows Server 2012 R2安装 SharePoint Server 2013都没装上去.最后发现必须安装带SP1的SharePoint 2013,不然那一步IIS永远 ...

  7. 2016-12-19 php修改数据库数据

    让info表在网页中显示 <h1>人员表</h1><table width="100%" cellpadding="opx" ce ...

  8. discuz ucenter无法连接数据库

    discuz ucenter无法连接数据库 - discuz搬家后 ucenter无法连接数据库 论坛换了个空间,把密码和数据库名称都改了,点击ucenter时候出现了: UCenter info: ...

  9. 深入理解javascript中实现面向对象编程方法

    介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...

  10. 自定义AlertDialog的样式

    一.在XML中定义好要显示的AlertDialog的布局 二.在代码中创建alertdialog 对象 AlertDialog dialog = new AlertDialog.Builder(thi ...