博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ruby正则表达式
阅读量:5139 次
发布时间:2019-06-13

本文共 1992 字,大约阅读时间需要 6 分钟。

正则表达式的功能有两个:检查匹配是否成功和回溯参照

新建正则表达式对象的方式

  • 直接用”//“括起来
    /Marlon/.class  #=> Regexp
  • 使用%r
    %r(Marlon)  #=> /Marlon/

“^”匹配开头,“$”匹配结尾

  • 正则表达式里加上“^”则表示匹配的字符串的开头需为“^”后面的字符
  • 正则表达式里加上“$”则表示匹配的字符串的开头需为“$”后面的字符
    /^ABC/ =~ "ABCMarlon"   #=> 0 /ABC$/ =~ "MarlonABC"   #=> 6 /^ABC$/ =~ "ABC"        #=> 0 /^ABC$/ =~ "ABCABC"     #=> nil   注意这里,以“ABC”开头也以“ABC”结尾,但结果匹配不成功

使用“[]”匹配文字范围

/[ABC]/ =~ "A"           #=> 0   "ABC"中任意一个与字符串匹配/[0-9]/ =~ "59"          #=> 0   数字0到9中任意一个与字符串匹配/[A-Za-z_-]/ =~ "-"      #=> 0   字符A到Z或字符a到z或"-"或“-" 与字符串想匹配

“.”与任何字符匹配成功

  • “.”能与任何单个字符匹配成功,主要用于匹配在某个位置必须有一个字符
  • 在ruby1.9版本以后,“.”也可与单个汉字相匹配

反斜线”\“匹配样式

  • \s,表示空白,能与一些转义符匹配成功(如空白字符、定位字符、换行字符、换页字符等)
    /\s/ =~ " "    #=> 0 /\s/ =~ "\n"   #=> 0
  • \d,与0数字匹配成功
  • \w,与英文或数字匹配成功
  • \A,与字符串前端匹配成功
    /\AMarlon/ =~ "Marlon!!!!"   #=> 0 /\AMarlon/ =~ "AMarlon!!!!"  #=> nil
  • \Z,与字符串末端匹配成功
  • 反斜线 + 转义符,转义符不起转移作用,只是代表该字符本身
    /\^ABC/ =~ "ABC"    #=> nil /\^ABC/ =~ "^ABC"   #=> 0

对反复出现的字符的匹配

  • “*” 出现0次以上(包括0次)
    /A*/ =~ ""      #=> 0 /A*/ =~ "A"     #=> 0 /A*/ =~ "AAAAA"    #=> 0
  • “+” 出现1次以上
    /A+/ =~ ""      #=> nil /A+/ =~ "A"     #=> 0 /A+/ =~ "AAAAA" #=> 0
  • “?” 出现0次或1次
    /^A?$/ =~ ""    #=> 0 /^A?$/ =~ "A"   #=> 0 /^A?$/ =~ "AA"  #=> nil

最短匹配

“()”与反复

  • 用“()”将几个字符放一起,当作一个字符使用
    /^(ABC)*$/ =~ "ABCABC"   #=> 0

多选(使用“|”)

  • 与“或”相同,只要有一个满足条件即可
    /^(ABC|DEF)$/ =~ "DEF"    #=> 0 /^(ABC|DEF)$/ =~ "AAA"    #=> nil

     

正则表达式的选项

  • i:忽略英文字母的大小写差异
    /ABcdEFg/i =~ "abcdefg"     #=> 0 /ABcdEFg/ =~ "abcdefg"      #=> nil
  • s、e、u、n:指定字符编码方式
    s:  Shift_JISe:  EUC-JPu:  UTF-8n:  匹配时不考虑文字编码

    要匹配的字符串包括中日文等ASCII之外的文字时使用折线选项

  • x:忽略正则表达式内部的空白,并忽略“#”后面的内容(可用“#”写注释语句)
  • m:让“.”与换行符匹配成功

回溯参照(取出与字符串匹配成功的部分)

  • 使用类似“$”+ 数字的变量去匹配成功的字符串
    /(.)(.)(.)/ =~ "abc"a = $1   #=> "a" b = $2   #=> "b" c = $3   #=> "c"
  • 不需要回溯参照时写成“(?:)”
    /(.)(\d\d)(.)/ =~ '123456'$1   #=> "1" $2   #=> "23" $3   #=> "4" /(.)(?:\d\d)(.)/ =~ '123456'$1   #=> "1" $2   #=> "4"
  • 使用“$`”, “$&”, “$'”存储匹配结果
    /c./ =~ 'abcdef'$`   #=> "ab"   匹配成功部分左边部分字符串$&   #=> "cd"   匹配成功部分的字符串$'   #=> "ef"    匹配成功部分右边部分字符串

     

转载于:https://www.cnblogs.com/jing5022/p/3182426.html

你可能感兴趣的文章
观察者模式
查看>>
Hadoop分布式文件系统中架构和设计要点汇总
查看>>
cout和printf
查看>>
UVa 10088 - Trees on My Island (pick定理)
查看>>
#C++PrimerPlus# Chapter11_Exersice4_mytimeV4
查看>>
iOS8 针对开发者所拥有的新特性汇总如下
查看>>
Jmeter + Grafana搭建实时监控可视化
查看>>
uCGUI字符串显示过程分析和uCGUI字库的组建
查看>>
h5唤起app
查看>>
SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件
查看>>
[转]vs2010编译金山代码
查看>>
数学图形之Boy surface
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
3.浏览器检测
查看>>
01: socket模块
查看>>
Border-radius
查看>>
mysql触发器
查看>>
Redis学习笔记(1)Redis安装和启动
查看>>
淌淌淌
查看>>
5W1H
查看>>