`
jbf034
  • 浏览: 152386 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Ruby中的正则表达式的应用

阅读更多

首先问大家一个问题:
编程语言(比如ruby)中什么数据类型最重要?可能大家会说到──对象,数组....
其实是String(字符串)
而对字符串的处理很大一部分依赖匹配,而匹配方法中,正则表达式是“降龙十八掌”,下面我们就学习正则表达式

首先是 元字符:
. :匹配除换行符以外的任意字符
[x]:匹配中括号中的任意一字符 如[abc]则匹配a或b或c
[^x] :匹配除了x以外的任意字符 :如[^abc] 则匹配除a/b/c以外的任意一字符
^ :匹配开始地方  如:^a 表示匹配以a开头的,^[a-z] 表示以小写任意一字母开头的
$ :匹配结束地方 如:a$ 表示匹配以a结尾的
x|y :匹配x或匹配y 如 ^[a-z] | ^[0-9] 表示以任意一小写字母开头,或以任意一数字开头的。实现上这个匹配也可以写成^[a-z0-9],不过|还是有它的独有的适用之处的

量词(限定符)
? :重复0次或1次
× :重复0次或多次
+ :重复1次或多次
{m} :重复m次
{m,} :重复m次或更多次
{m,n} :重复m次至n次

例如 "aa" "aaa" "aaaa" 正则表达式 /^a{2,3]$/ 能匹配第一个和第二个字符串,因为此表达式是说,从开头到结尾中间是连续2个至3个a都可以。
例:"d3df" "abcd" "3dfs4" "dfsde" ,正则表达式/^[a-z]*$/ 能匹配第二个和第四个,因为此表达式是说,从开头到结尾是0个或多个(不限制多少个)a-z之内的字符(即小写字母)但,对此例,用/[a-z]*/则能匹配成功这四个字符串。如果换用 /[a-z]+$/则只能匹配成功除第3个字符串以外的三个字符串。为什么?此表达式是说以1个或多个连续的a-z之内(即小写字母)的字符结尾。
常用字符集
\s :所有空白字符
\S :所有非空白字符
\w :所有字母、数字、下划线、汉字的字符
\W :所有不是字母、数字、下划线、汉字的字符
\d :所有数字字符
\D :所有非数字字符
\b :单词的开始或结尾
\B :匹配不是单词或开始的位置
分组
上面我们例用 {} × +等可重复多个字符,如果想要重复一个字符串又该怎么办,你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了
例如,简单的匹配IP地址,(\d{1,3}\.){3}\d{1,3} 此表达式的意思是,前面小括号中是说匹配数字的1-3个和一个字符.,后面一个{3}表示重复3次,这3次是对前面整个小括号所匹配的内容(即是一个字符串)复复3次,再后面匹配一个1-3位的数字

后向引用
后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本
例 \b(\w+)\s*\1 此表达式或匹配两个连续的单词,\b匹配单词开始位置,\w+是匹配任意的字符至少一个,小括号进行了第一个编组,\s*是匹配0个或多个空格,后面的\1是引用了前面第一个编组匹配成功的字符串,如hello hello 对于此表达式,\b(\w+)是匹配了第一个hello ,则\1就是使用它的值--hello

(? =exp)也叫零宽先行断言或正预查,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。比如/b/w+(?=ing/b),匹配以 ing结尾的单词的前面部分(除了ing以外的部分),如果在查找I'm singing while you're dancing.时,它会匹配sing和 danc。

(?!exp)零宽负向先行断言,只会匹配后缀exp不存在的位置。/d{3}(?!/d)匹配三位数字,而且这三位数字的后面不能是数字。


当正则表达式中包含能接受重复的限定符(指定数量的代码,例如*, {4,8}等)时,通常在使整个表达式能得到匹配的前提下匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b 结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配
在 * + {}后面加上? 表示以非贪婪法去匹配,再以上例,a.*?b去匹配aabab的话,则会匹配aab


下面是一些常用的正则表达式:

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?<\\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+:\/[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字

匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:简单匹配ip地址时有用

匹配特定数字:
^[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)
评注:处理大量数据时有用,具体应用时注意修正

匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
分享到:
评论

相关推荐

    正则表达式.pdf

    2. 匹配字符串:使用模式对象的match或search函数将正则表达式应用于字符串。 3. 提取匹配结果:使用group函数或groups函数提取匹配结果。 Python中正则表达式的实现: 1. import re:导入re模块。 2. pattern = ...

    正则表达式经典实例

    《正则表达式经典实例》这本书深入浅出地介绍了正则表达式的基本概念和高级特性,并提供了丰富的实例,覆盖了C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等多种编程语言。 #### 二、核心内容概览 1. *...

    精通正则表达式电子书

    正则表达式是一种功能强大的文本处理工具,可以用于在各种编程语言中进行数据的搜索、替换以及提取等操作。它作为一种标准特性已经广泛应用于多种流行的语言与工具之中,如Perl、Python、Ruby、Java、VB.NET及C#...

    正则表达式入门指导.ppt

    正则表达式(Regular Expression)是一种强大的文本处理工具,它是一种模式匹配语言,用于在文本中查找、替换或提取符合特定规则的...在实际应用中,通常需要不断地试验和调整,以确保正则表达式能够精确地匹配目标文本。

    ruby正则表达式

    接下来,我们将深入探讨Ruby正则表达式的主要知识点。 ### 一、字符规则 1. **基础字符匹配**:`/a/`会匹配字符`a`。 2. **字符集**:`/[\d]/`匹配任意数字;`/[\w]/`匹配任何字母、数字或下划线;`/[\s]/`匹配...

    正则表达式袖珍手册

    本书涵盖了多种编程语言中的正则表达式应用,包括但不限于: - **Perl**:介绍了支持的元字符、正则表达式操作符等。 - **Java**:探讨了Java的正则表达式类和接口,如`Pattern`和`Matcher`。 - **.NET和C#**:分析...

    正则表达式工具 for mac

    在这款mac应用中,用户可以实时预览正则表达式的匹配效果,这对于调试和优化正则表达式至关重要。此外,它可能还提供诸如搜索替换、测试用例创建、字符集可视化等功能,帮助用户更直观地理解和改进正则表达式。 在...

    [精通正则表达式(第三版) 中英文 PDF 高清

    同时,第三版还特别关注了跨平台兼容性,包括Java、JavaScript、Perl、PHP、Python、Ruby等主流编程语言中的正则表达式实现差异。 PDF格式的电子书为阅读提供了便利,高清的扫描版确保了文字和图表的清晰可读。中...

    正则表达式辅助软件大全

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在编程语言中,正则表达式是一种强大的工具,但初学者往往会觉得它难以理解和操作。...

    精通正则表达式_第三版(英文版)

    正则表达式,简称regex,是一种模式匹配语言,广泛应用于文本处理、数据验证、搜索和替换等任务中。在编程世界里,理解和掌握正则表达式是提升效率的关键技能之一。 本书分为多个部分,逐步引导读者从基础到高级,...

    ruby正则表达式规则

    ### Ruby正则表达式规则详解 #### 一、引言 在Ruby编程语言中,正则表达式(Regular Expression)是一种强大的文本处理工具,被广泛应用于字符串搜索与替换、数据验证以及模式匹配等场景。本篇文章将深入探讨Ruby...

    精通正则表达式~~~

    表达式应用场合... 294 动态作用域及正则匹配效应... 295 匹配修改的特殊变量... 299 qr/…/运算符与regex对象... 303 构建和使用regex对象... 303 探究regex对象... 305 用regex对象提高效率... 306 Match...

    正则表达式测试 工具

    在IT行业中,正则表达式是程序员、数据分析师和系统管理员的必备技能之一,它广泛应用于文本处理、数据验证、日志分析等场景。本压缩包包含三个与正则表达式相关的测试工具:testregex.exe、RegexTest.exe和RegExp....

Global site tag (gtag.js) - Google Analytics