正则表达式常见例子

来源:互联网 发布:数据透视表行合计 编辑:程序博客网 时间:2024/05/22 07:51
写在前

正则表达式就像一把倚天剑,可以用它来威震武林,高效快速解决各种问题,也可以用来切菜砍柴,千差万别全在运用,剑道变幻,心意为恒,外见于形,内敛于性,道心自在。

1、只匹配期望的文本,排除不期望的文本,不盯着文本,发散思维思考表达式会产生的副作用,常想想失败
2、要易于理解,结构分明,容易控制
3、注意效率问题

一、匹配连续行

【文本】I tell =you are a boy and \
    she is a gile \
    yes!no?\
【表达式1】^\w+\s*=[^\n\\]*(\\n[^\n\\]*)*
【问题1】如果每行文中件含有\则停止匹配,执行表达式2
【表达式2】([^\n\\]|\\|\n)*
【解析】
1、使用选择结构[^\n\\]或\\或\n,每个字符与这三种情况对比,则可匹配文本中所有字符;
2、表达式1中,(\\n[^\n\\]*)*尽可能多的匹配\nshe is a gile、\nyes!no?,文本中最后一个\是捕获不到的。

二、匹配IP地址

【IP地址】合法的ip地址分为4段,每段都在0~255之间,所以某段中出现0、01、001都是合法的
【解析】
表达式1:\d\d\d,无法限定数字必须在0~255之间,且无法匹配双位数和单位数,如果是4位数也可以匹配其中后三位
表达式2:(\d\d?\d?.){3}(\d\d?\d?),限定了其为四段三位数,但无法限定大小
表达式3:[01]?\d\d?|2[0-4][0-9]|25[0-5],限定了数字大小,其中\d\d?不用\d?\d可以更快的判断是否为数字
【表达式】(([01]?\d\d?|2[0-4]\d|25[0-5]).){3}([01]?\d\d?|2[0-4]\d|25[0-5])(?!.)(?!\d)
这个表达式也有问题:0.0.0.0不合法,
(?!.)(?!\d)是什么:后边没有“.”和数字

三、处理文件名

处理文件名和路径:/user/local/bin/prel
【注意】表达式[^//]*$是一件效率很低的事情,存在太多的回溯
【表达式1】下面这个式子捕获的第二参数即使prel
markdow
【表达式2】(?<=//)(?=\w+)(\w+)通过环视零宽度断言定位两个“/”之间的文本,可以分析路径中每一项
【表达式3】(?<=//)(\w+)(?=$)直接定位到prel,但是注意如果是/prel/就不能次用此式

四、匹配对称括号

普通的单个括号匹配非常简单,困难的是任意深度的嵌套括号:(saaa(adg)adaf)
利用编程本身的功能可以匹配,但正则表达式直接匹配非常困难
再思考一段时间……

0 0
原创粉丝点击