打印
[嵌入式linux]

regex: Regular Expression. 正则表达式

[复制链接]
2883|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinanjj|  楼主 | 2011-10-6 04:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
regex: Regular Expression.
特殊字符(元字符): [ ] \ ^ $ . | ? * + ( )
元字符用作文本字符: 用"\"对其进行换码(escape).
不可显示字符: \t == Tab(0x09);   \r == 回车符(0x0D);   \n == 换行符(0x0A);
        字符集
"[]"括起来的字符集合. 仅仅匹配多个字符中的一个.
example:
[ae]: 匹配一个"a"或一个"e".
gr[ae]y: 匹配gray或grey.
[0-9]: 匹配0到9之间的单个数字.
[0-9a-fA-F]: 匹配单个的16进制数字, 且大小写不敏感.
[0-9a-fxA-FX]: 匹配一个16进制数字或字母X.
    取反字符集: 在"["后面紧跟"^", 将会对字符集取反. 取反字符集匹配回车换行符.
在字符集中只有4个字符具有特殊含义: ] \ ^ - . ]代表字符集定义的结束; \代表转义; ^代表取反; -代表范围定义.
example:
[\\x]: 匹配\或x
\d == [0-9]
\w == 单词字符
\s == 白字符(空格符,Tab符,回车符)
字符集的缩写形式可以用在方括号之内或之外.
\s\d: 匹配一个白字符后面紧跟一个数字.
[\s\d]: 匹配单个白字符或数字.
取反字符集的简写
[\S] == [^\s]
[\W] == [^\w]
[\D] == [^\d]
        使用?*或+进行重复
?: 告诉引擎匹配前导字符0次或一次(表示前导字符是可选的)
*: 告诉引擎匹配前导字符0次或多次
+: 告诉引擎匹配前导字符1次或多次
    限制性重复
定义对一个字符重复多少次. 词法是: {min,max}. min和max都是非负整数, 如果逗号有而max被忽略了, 则max没有限制. 如果逗号和max都被忽略了, 则重复min次.
example:
\b[1-9][0-9]{3}\b : 匹配1000~9999之间的数字("\b"表示单词边界).
\b[1-9][0-9]{2,4}\b : 匹配一个在100~99999之间的数字.
使用"."匹配任一字符
"^"匹配一行字符串第一个字符前的位置.
"$"匹配字符串中最后一个字符的后面的位置.
选择符 "|" .用"|"匹配多个可能的正则表达式中的一个
example:
cat|dog : "cat"或"dog"
        组与向后引用
把正则表达式的一部分放在"()"内, 你可以将它们形成组. 然后你可以对整个组使用一些正则操作, 例如重复操作符.
当用“()”定义了一个正则表达式组后,正则引擎则会把被匹配的组按照顺序编号,存入缓存。当对被匹配的组进行向后引用的时候,可以用“\数字”的方式进行引用。<<\1>>引用第一个匹配的后向引用组,<<\2>>引用第二个组,以此类推,<<\n>>引用第n个组。而<<\0>>则引用整个被匹配的正则表达式本身。我们看一个例子。
假设你想匹配一个HTML标签的开始标签和结束标签,以及标签中间的文本。比如<B>This is a test</B>,我们要匹配<B>和</B>以及中间的文字。我们可以用如下正则表达式:“<([A-Z][A-Z0-9]*)[^>]*>.*?</\1>”
首先,“<”将会匹配“<B>”的第一个字符“<”。然后[A-Z]匹配B,[A-Z0-9]*将会匹配0到多次字母数字,后面紧接着0到多个非“>”的字符。最后正则表达式的“>”将会匹配“<B>”的“>”。接下来正则引擎将对结束标签之前的字符进行惰性匹配,直到遇到一个“</”符号。然后正则表达式中的“\1”表示对前面匹配的组“([A-Z][A-Z0-9]*)”进行引用,在本例中,被引用的是标签名“B”。所以需要被匹配的结尾标签为“</B>”
你可以对相同的后向引用组进行多次引用,<<([a-c])x\1x\1>>将匹配“axaxa”、“bxbxb”以及“cxcxc”。如果用数字形式引用的组没有有效的匹配,则引用到的内容简单的为空。
    重复操作与后向引用
当对组使用重复操作符时,缓存里后向引用内容会被不断刷新,只保留最后匹配的内容。例如:<<([abc]+)=\1>>将匹配“cab=cab”,但是<<([abc])+=\1>>却不会。因为([abc])第一次匹配“c”时,“\1”代表“c”;然后([abc])会继续匹配“a”和“b”。最后“\1”代表“b”,所以它会匹配“cab=b”。
应用:检查重复单词--当编辑文字时,很容易就会输入重复单词,例如“the the”。使用<<\b(\w+)\s+\1\b>>可以检测到这些重复单词。要删除第二个单词,只要简单的利用替换功能替换掉“\1”就可以了。

相关帖子

沙发
caoqing1314| | 2012-2-25 17:55 | 只看该作者
很好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:In God We Trust 独立的个人,体赖科学技术工具提供针对个人的产品与服务,是通向幸福的唯一道路 工程师,设计师等可以个人创业的群体,将逐步瓦解官僚体制公司,成为中国中产。(重复劳动,工厂等,将逐步机械化) seacer.co

456

主题

6300

帖子

25

粉丝