概括、ruby提供内建的正则表达式支持,正则表达式是字符串处理的屠龙,正则表达式使我们只需要描述
字符串,而具体的处理就交给正则引擎就可以了。
正则表达式由元字符,转义字符、POSIX字符及普通字符组成。
元字符
在ruby的正则表达式中,有些字符表示特殊的意义,他们表示字符的种类,位置,数量等等信息,它们是
.
, |
, ( )
, [ ]
, \
, ^
, { }
, +
, $
, *
, ?
◆ )
和 ]
只有在前面有(和]才是特殊字符。
◆ {
和 }
只有同时出现表示字符的数量是才是元字符。
◆ 对元字符进行转义就可以匹配元字符,例如 \(
匹配 (
◆ 元字符在不同的场合可能会具有不同的意义,例如()既可以表示分组也可以表示前向引用,同时还表示聚合。
转义字符及POSIX字符
转义字符及POSIX字符可以表示非打印字符或者一类字符。
普通字符
普通字符表示其自身。
正则表达式通过以下的方式来描述。
一、字符串里字符的种类?
字符或正则 |
表示的意义 |
.
|
匹配除换行符以外的任意字符 |
[abc] -
[^abc]
|
匹配字符数组中的任意一个 |
|
|
ab|bc 匹配ab和bc |
\d - \D
|
匹配数字 |
\s - \S
|
匹配空白符 |
\w - \W
|
匹配字母,数字,下划线 |
(?#comment)
|
注释 |
#{表达式}
|
表达式替换
|
普通字符 |
匹配自身,如/a/匹配"a" |
_____ |
|
_____ |
|
_____ |
|
_____ |
|
_____ |
|
POSIX字符类
POSIX字符 |
表示的意义 |
[:alnum:]
|
匹配小写字母或者数字 |
[:alpha:]
|
匹配大小写字母 |
[:cntrl:]
|
匹配控制字符 |
[:digit:]
|
匹配数字 |
[:graph:]
|
匹配除了空格以外的可打印字符 |
[:lower:]
|
匹配小写字符 |
[:print:]
|
匹配任何可打印字符 |
[:punct:]
|
匹配除了字母,数字及空格以外的可打印字符 |
[:space:]
|
匹配空白符 |
[:upper:]
|
匹配大写字母 |
[:xdigit:]
|
匹配16进制数字0-f |
二、字符串里的字符位置?
字符或正则 |
表示的意义 |
^
|
匹配一行的起始位置
|
$
|
匹配一行的结尾位置 |
\A
|
匹配字符串起始位置 |
\z
|
匹配字符串结尾位置 |
\b - \B
|
匹配单词边界 |
(?=reg)
|
后面匹配一个/reg/的位置 |
(?!reg)
|
后面不匹配一个/reg/的位置 |
(?<=reg)
|
前面面匹配一个/reg/的位置 |
(?<!reg)
|
前面不匹配一个/reg/的位置 |
三、字符串里的字符的数量?
字符或正则 |
表示的意义 |
*
|
>=0 |
+
|
>=1 |
?
|
0 或者 1 |
{m,n}
|
>=m 且 <=n |
{m,}
|
>=m |
{m}
|
==m |
?
|
在*,+,{}后表示数量尽量最少匹配 |
_____ |
|
备注
|
数量词可以应用于(reg)整体 |
四、正则表达式的分组
可以对正则表达式进行分组,并在匹配成功后把分组的值存储到$1,$2,$3,$4.......
print $1,"\n",$2 if "a1b2c3d4e5" =~ /(\w{2})(\w*)/
五、正则表达式的匹配选项
可以在正则表达式后加上一些选项,对正则表达式进行额外的控制。
i
表示大小写不敏感
print "true" if "a" =~ /A/i #输出true
x
表示扩展模式,可以在正则表达式中插入空白符,较长的正则采用这种方式具有良好的阅读性。
print "true" if \
"ab12ef" =~ \
/ab
\d+
ef
#正则内的单行注释
/x #输出true
m
表示跨行模式,在此模式下.
可以匹配换行符。
print $1 if "abc\nef" =~ /(.*)/m #输出abc\nef
o
表示正则里的#{}表达式只被替换一次
六、字符串的正则替换
print "abcd".sub(/\w/,"9")
print "\n"
print "abcd".gsub(/\w/,"9")
七、正则中的特殊全局变量
$1,$2,$3....分组匹配文本
$` 匹配文本之前的文本
$' 匹配文本之后的文本
print $`,"\n",$&,"\n",$' if "ab9cd" =~ /\d/
八、正则表达式产生方式
除了一般的//以外,%r{}也可以。
分享到:
相关推荐
学习更高深的正则表达式特性中的微妙之处; 理解在不同语言中正则表达式的API、语法和行为之间的区别; 创建更好的正则表达式来满足个性化的需求。 使用8种编程语言的详细解决方案,包括一个正则表达式简明教程
该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式图书领域形成了独特的“一夫当关”的局面,称其为正则表达式圣经,绝对当之无愧。 ——《程序员》杂志技术主编 孟岩 本书讲解正则...
即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...
《精通正则表达式(第3版)》是讲解正则表达式的经典之作。《精通正则表达式(第3版)》主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了在Perl、Java、.NET、PHP中正则...
该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式图书领域形成了独特的“一夫当关”的局面,称其为正则表达式圣经,绝对当之无愧。 ——《程序员》杂志技术主编孟岩 《精通正则表达式...
《正则指引》针对作者在开发中遇到的实际问题,以及其他开发人员咨询的问题,总结出一套使用正则表达式解题的办法,并通过具体的例子指导读者拆解、分析问题。全书分为三大部分:第一部分主要讲解正则表达式的基础...
对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,本书给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。 本书的读者对象是对...
本书是讲解正则表达式的经典之作。本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在Perl、 Java、.NET、PHP中的用法。 本书自第1版开始着力于教会读者...
比较齐全的正则表达式,完全可以满足你平时的各种需要
ruby正则表达式规则 ruby中经常用到的正则表达式使用方法
如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MySQL、VB.NET和C#(以及.NET Framework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本...
精通正则表达式第三版 搜集于网络 前言..........I 第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于...
本书讲解了基于8种常用的...对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,本书给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。
《正则表达式经典实例》对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET的实例。 《正则表达式经典实例》主要包括以下...
OgreKit 是一款为 Cocoa 开发的正则表达式框架,该框架提供了一个与 Ruby 使用的相同的正则表达式引擎与一个高层次的 GUI 查找面板。可以在这里获取源码。 OgreKit 使用 Oniguruma/Onigmo 正则表达式引擎。...