REGULAR EXPRESSION TRAINING
Simon 2012.08.24 概念
在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:1. 灵活性、逻辑性和功能性非常的强;2. 可以迅速地用极简单的方式达到字符串的复杂控制。3. 对于刚接触的人来说,比较晦涩难懂。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。
基本语法
正则所有元字符:$(*+.[?\^{
在匹配这些字符时得进行转义,如匹配"\",你得用"\\"
正则表达式常用语法:
\d 匹配一个数字字符。等价于[0-9]。
\n 匹配一个换行符。等价于\x0a 和\cJ。
\r 匹配一个回车符。等价于\x0d 和\cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于\x09 和\cI,Tab键。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
x|y 匹配x 或y。例如,'z|food' 能匹配"z" 或"food"。'(z|f)ood' 则匹配"zood" 或"food"。[xyz] 字符集合。匹配所包含的任意一个字符。例如,'[abc]' 可以匹配"plain" 中的'a'。
表达式符号--功能对照表
和数字,而元字符则具有特殊的含义,我们下面会给予解释。
在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,它可以匹配"testing"和"123testing"等字符串,但是不能匹配"Testing"。
要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。
常用的正则表达式
匹配中文字符的正则表达式:
[\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了哦
匹配双字节字符(包括汉字在内):
[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配HTML标记的正则表达式:
<(\S*?)[^>]*>.*?>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配EMAIL地址的正则表达式:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配腾讯QQ号:
[1-9][0-9]\{4,\}
评注:腾讯QQ号从1000 0 开始
匹配身份证:
\d{17}[\d|X]|\d{15}
评注:中国的身份证为15位或18位
匹配特定数字:
^[1-9]\d*$//匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$//匹配整数
(^[1-9]\d*$)|0//匹配非负整数(正整数+ 0)
(^-[1-9]\d*$)|0//匹配非正整数(负整数+ 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$//匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$//匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$//匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$//匹配非负浮点数(正浮点数+ 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$//匹配非正浮点数(负浮点数+ 0)
评注:处理大量数据时有用,具体应用时注意修正
示例联系
以上是基本使用说明,下边我们通过几个实例来说明下正则表达式简单应用。
实例1
通过固定格式生成文字链接:
首页|特惠套餐|域名注册|虚拟主机|服务器托管|服务器租用|网站建设|企业邮局|代办
ICP|付款方式
用正则表达式生成这样的形式
实例2
通过固定格式生成文字链接扩展版:
INDEX.HTML@首页
https://www.wendangku.net/doc/169454465.html,/@柳永法(YONGFA365)'BLOG THTC.HTML@特惠套餐
YMZC.HTML@域名注册
XNZJ.HTML@虚拟主机
FWQTG.HTML@服务器托管
FWQZY.HTML@服务器租用
WZJS.HTML@网站建设
QYYJ.HTML@企业邮局
DBICP.HTML@代办ICP
FKFS.HTML@付款方式
用正则表达式生成这样的形式:
实例3
将Sample_file.xml.ttx 文件的100% 绿色匹配的部分,替换成XU 灰色单元。From Simon: 将100%变成XU
-》
Colour="0x008000" 深绿
Colour="0x808080" 灰
----------------------------------------------------------------------------------
CSV 存出的ttx,100%是绿色,变成XU
->
MatchPercent="100">\1Colour="0x008000"\2