免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1710 | 回复: 0

学习正则表达式的新手可以看此贴,转载的貌似不错 [复制链接]

论坛徽章:
0
发表于 2013-02-26 19:11 |显示全部楼层
本帖最后由 wwwcctvcomji 于 2013-03-24 20:44 编辑

正则表达式很重要,几乎每种编程语言都会用到

先解释下,什么是正则表达式?
在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

具体应用到哪呢?比如说网页表单提交

验证手机号,邮箱是否为正确格式,这就需要正则表达式了
还有很多,比如说网页采集等
基本涉及到字符串的处理多多少少都需要正则表达式

那么怎么来测试自己写的正则表达式呢
每种编程语言都有自己的正则表达式函数
我们就用js的吧,直接新建个记事本,把后缀改成html
然后加入如下代码
<input id="a" type="text" />
<input type="button" onclick='regexp(document.getElementById("a").value)' value="Test"/>
<script>
function regexp(a)
{
if(a.match("a"))
alert("Pass");
else
alert("No Pass");
}
</script>

代码很简单,懂点js就能看懂
其中a是从文本框来的字符串
match是js String对象专门用来匹配正则表达式的方法,当然js正则表达式的方法还不止match一个,这个是最常用的一个
match("a") 括号里的内容就是要匹配的内容,以前玩传奇加速器嘟嘟传奇这个游戏我也是这样的。
就是说如果a字符串内容只要包含a这个字符,就返回一个数组(就是匹配成功),反之则返回null


if(a.match(a))
如果不加“” 所有东东全能pass

这个是最简单的匹配入门了
只要能文本框输入 a 或者 abc,11a,6a,45a,aaaaa等
只要包含a,就能通过
<input id="a" type="text" />
<input type="button" onclick='regexp(document.getElementById("a").value)' value="Test"/> <script>
function regexp(a)
{
if(a.match("abc"))
alert("Pass");
else
alert("No Pass"); }
</script>

只要字符串包含abc就pass
ab123 ,a123b,ab12c 不通过

以下的贴我就只复制a.match("abc")这一部分了,这样也看的清楚一点
注意上面的都是区分大小写的
另外用正斜杠/包起来也能执行匹配,以后就都用//了,初期先搞清楚//和“”的区别
if(a.match(/a/)) 只要字符串包含a就能pass

那么,如果我想字符串匹配包含引号怎么办?像这样“a”
简单,用正斜杠包起来
if(a.match(/"a"/))
这样就需要有引号才能pass通过了
还有一种是用转义符\ 即反斜杠,C语言见过的
if(a.match("\"a\""))

如果要匹配括号呢
如果是匹配单个括号,用引号
if(a.match(")")) if(a.match("(")) 都错误,因为一段代码出现了单数的括号
if(a.match(/)/)) if(a.match(/(/)) 也一样

我先说引号
如果要匹配单个括号
if(a.match("\\("))
\\表示一个转义符\ 然后\( 这才开始转义 表示(
首先声明一下,在引号里转义符不能单独存在
if(a.match("\")) 这样是不行的
为什么这样说呢,因为在引号里,两个\\才代表一个转义符\,这里\\并不是转义成\
那这样行不行 if(a.match("\\")) ,总不是单独了吧 NO,\\表示\ 还是不行
if(a.match(“\\\”)) 三个呢? \\表示\ 有一个转义符了,但要转义成\号还缺少一个

if(a.match(“\\\\”))这样就行了,\\两个转义符在一起就转义成了普通的反斜杠\号,所以这个可以匹配包含\号的字符串
如果要匹配两个\\ 则if(a.match(“\\\\\\\\”)) 八个
后面的依此类推

现在说// 正斜杠
如果要匹配单个括号
这样就ok if(a.match(/\(/)) 发现没,一个转义符就够了
if(a.match("\\(")) 其实也是一个转义符,就是给你个错觉觉得是两个,在说一次,在引号里,两个\\才代表一个转义符

如果要匹配一个反斜杠\号
if(a.match(/\\/))
两个则if(a.match(/\\\\/))

关于转义符,大家最好看看百度百科,查查资料
正则表达式玩的就是转义符,这个必须理解

我承认这楼非常的让人头晕。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP