ruby之正则表达式

概括、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",{1},"\n",

if "ab9cd" =~ /\d/

八、正则表达式产生方式

除了一般的//以外,%r{}也可以。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值