背景音乐

天使动漫论坛 - 梦开始的地方

查看: 15566|回复: 2
打印 上一主题 下一主题

【教程】正则表达式简单入门教程

跳转到指定楼层
1#
不死鸟之翼 发表于 2015-10-14 22:10:29 |只看该作者 |正序浏览
本帖最后由 不死鸟之翼 于 2015-10-14 22:18 编辑

不死鸟之翼@天使动漫 禁止转载
在这放一篇正则表达式的简单入门教程,力求清晰易懂
在阅读本文之前建议自备一个正则表达式测试器,推荐deerchao写的

0 什么是正则表达式
简单地说,正则表达式是用于文本处理的一种工具,编写一种“模式”来匹配和修改字符串

输入文本是【My name is AzureFx.】,我希望测试其中是否包含【chibimiku】或者【AzureFx】,那么编写如下正则
chibimiku|AzureFx
运行匹配,得到结果如下
0
AzureFx
再来一个复杂点儿的
WAP页面的图片会变成一个[查看图片]的链接,我希望变成img标签。
输入文本是【<a href="http://foo.com/foo.png" target="_blank">[查看图片]</a>】,这次用正则【<a href="(\S*)" target="_blank">\[查看图片\]</a>】进行替换,替换目标为【<img src="$1"/>
运行替换,得到结果如下
<img src="http://foo.com/foo.png"/>
1 元字符
正则表达式的元字符很多,不同的语言和库也支持自己的扩展功能。元字符指具有特定功能的字符,概念类似Windows的“通配符”*和?,但远比这个复杂。有的元字符代表某个实体字符,有的代表某个位置

. 匹配一个任意字符
\S 匹配一个可见字符
\s 匹配一个不可见字符
^ 匹配字符串的开始
$ 匹配字符串的结尾
反斜杠加上某个有功能的字符可以转义。例如\.就是点这个字符本身
可以指定字符的集合
[0123456789]
或者写成
[0-9]
例如【re.e..e】可以匹配【reserve】或【reverse
2 量词
量词可以重复发挥一个字符的匹配作用。
常见的量词有
* 匹配0次或以上
? 匹配0次或1次
+ 匹配1次或以上
{m} 匹配m次
{m,n}匹配m次至n次(闭区间)
{m,}匹配m次或以上
例如【uid=[0-9]+】可以匹配【hhhhhuid=1112128hhhhh
默认量词的作用是贪婪的,即尽可能多地匹配字符
量词后加【?】可改为非贪婪的,即尽可能少地匹配字符
3 捕获
正则可以用于提取出特定的信息,称为捕获,用一对圆括号【()】实现
上面的例子可以改写为【uid=([0-9]+)】,可以捕获等号后面的uid数字。再次运行匹配,输出如下
0 1
uid=1112128 1112128

第一行代表捕获组的编号,0代表被匹配的全部字符串,从1开始是捕获组的序号
让我们回到开头的例子
<a href="(\S*)" target="_blank">\[查看图片\]</a>
这里用圆括号包裹了“任意个可见字符”,也就是说我们想捕获href属性的字符串内容。(注意,【[】【】方括号要转义)
有的时候我们需要用括号组合一些内容,但又不想将其加入捕获,可以使用非获取匹配【(?:   )
例如【chibi(?:miku|luka)】可以匹配【chibimiku】或者【chibiluka】,但不会将【miku】或【luka】加入捕获。这是【chibimiku|chibiluka】的简便写法。
4 替换
用正则进行替换时 用【$X】引用捕获的内容,X为组号。还是开头的例子,【<img src="$1"/>】中的【$1】引用了href属性的链接内容,完成a标签到img标签的自动转换

看到这你大概会用正则处理问题了吧?其实元字符和语法还有很多,实在忘了的话去百度查个表也是没问题的
合理使用正则可以大幅度提高工作效率,即使日常中使用也有特效哦
已有 1 人评分天然 腹黑 收起 理由
海月星雨 + 120 + 120

总评分: 天然 + 120  腹黑 + 120   查看全部评分

KeepMagic 发表于 2015-11-5 18:38
请问
&quot;量词后加【?】可改为非贪婪的&quot; 是什么意思?
?不已经是量词了么

表示非贪婪的匹配问号跟在量词后面,比如*?
贪婪的意思是尽可能多地匹配,非贪婪相反
大概举个例子,比如_.+_匹配_123__456_的时候匹配内容是_123__456_,而用_.+?_的时候会匹配到两个,分别是_123_和_456_
正则在很多语言里可以用(CMD不行),C++11加入了原生正则支持
Office的查找替换也能用,把“使用正则表达式”勾上就行了

使用道具 举报

2#
KeepMagic 发表于 2015-11-5 18:38:03 |只看该作者
请问
"量词后加【?】可改为非贪婪的" 是什么意思?
?不已经是量词了么
另外正则表达式的使用环境是什么?比如我写个bat脚本,就能直接使用正则表达式么?还是要先装什么库?

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|WAP| 天使动漫论坛

【免責聲明】【删除申请】所有內容資源來自網絡&網友分享,僅供日語學習試用,請于24小時內銷毀。如侵犯您的權益請告知,將會第壹時間刪除。我的邮箱

GMT+8, 2026-3-2 06:52 , Processed in 0.173001 second(s), 30 queries , Gzip On.

Powered by Discuz! X2

© 2010-2017 天使动漫论坛

回顶部