`
fireflyman
  • 浏览: 113445 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

常用正則表達式(從其它地方找來的...我只是保存而已)

    博客分类:
  • ROR
阅读更多
原文鏈接: 
http://www.weekface.info/2010/04/02/ruby-regexp-examples

#1.用戶名注冊
/^[a-z0-9_-]{3,16}$/
#以字母開頭,包含字母,數字,_,-的3-16個字符

#2.用戶密碼
/^[a-z0-9_-]{6,18}$/
#同上

#3.十六進制數
/^#?([a-f0-9]{6}|[a-f0-9]{3})$/
#以#开头或者不以#开头, 后面跟 6个字符(a-f或者0-9) 或者 3个字符(a-f或者0-9)

#4.匹配一個Slug(啥叫Slug?看看上面地址栏里的那一陀)
/^[a-z0-9-]+$/
#多個字母(a-z),數字(0-9),和-組成的字符

#5.匹配Email地址,此乃神器也
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/

#6.匹配Url
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

#7.匹配IP地址
num = /\d|[01]?\d\d|2[0-4]\d|25[0-5]/  
exp = /^(#{num}\.){3}#{num}$/

#num是每个数字串的匹配模式, exp就是最终的RegExp了,下面是演示:

irb(main):001:0> num = /\d|[01]?\d\d|2[0-4]\d|25[0-5]/
=> /\d|[01]?\d\d|2[0-4]\d|25[0-5]/
irb(main):002:0> exp = /^(#{num}\.){3}#{num}$/
=> /^((?-mix:\d|[01]?\d\d|2[0-4]\d|25[0-5])\.){3}(?-mix:\d|[01]?\d\d|2[0-4]\d|25[0-5])$/
irb(main):003:0> exp.match("192.168.1.22")
=> #<MatchData "192.168.1.22" 1:"1.">

#8.匹配时间/日期类型(yyyy.mm.dd hh:mm:ss)
yyyy = /[1-9]\d\d\d/  
mm = /0?[1-9]|1[12]/  
dd = /0?[1-9]|[12]\d|3[01]/  
hh = /[01]?[1-9]|2[0-4]/  
MM = /[0-5]\d/  
ss = /[0-5]\d/  
date_time = /^(#{yyyy}\.#{mm}\.#{dd}) (#{hh}:#{MM}:#{ss})$/  

date_time =~ '2008.8.27 22:12:10'  # 0  
date_time =~ '2008.8.27 22:12:60'  # nil  

#9. 解决一个问题, 给了一个ip地址:192.168.1.1,想要转为Array: [192,168,1,1]
irb(main):001:0> "192.168.1.1".scan(/(\d+)\.?/)
=> [["192"], ["168"], ["1"], ["1"]]
irb(main):002:0> "192.168.1.1".scan(/(\d+)\.?/).flatten
=> ["192", "168", "1", "1"]
irb(main):003:0> "192.168.1.1".scan(/(\d+)\.?/).flatten.map{|n| n.to_i }
=> [192, 168, 1, 1]
irb(main):001:0> "192.168.1.1".split(".").map{|x| x.to_i}
=> [192, 168, 1, 1]


分享到:
评论
2 楼 fireflyman 2011-04-17  
原地址的东西真的没了......看来保存还是有益的
1 楼 fireflyman 2010-12-31  
  #(1)字面字符,表示"与该字符匹配",如/a/ =~ "a"
  #(2)圆点通配符(.),表示"与任意一个字符匹配",如 /./ = "%w(a b c d ... w)"
  #(3)字符类,表示"与这些字符中的一个匹配",如/[dr]ejected/,表示"匹配d或r,后接ejected"
  #(4)常见字符集的特殊转义序列: /[0-9]/ => /\d/ || /\w/ => /[0-9a-zA-Z_][]/ || /\s/ 与任何空白字符(空格、制表符、换行符)想匹配
  #(5)用小括号来捕获子匹配
  #str = "Peel, Emma,Mrs.,talented amateur"
  #/([A-Za-z]+),[A-Za-z]+,(Mrs?\.)/.march(str) Ruby填写的这些变量都是全局变量,它们以数作为名字:$1,$2,等等.
  #$1包含正则表达式从左侧开始的第一对小括号内的子模式所匹配的子字符串(规则为:在匹配操作成功后,变量$n(n是一个数)包含正则表达式从
  #左侧开始的第n对小括号内的子模式所匹配的子字符串) puts "Dear #{$2} #{$1}," => Dear Mrs.Peel,
  #(6)? => "0个或1个"  * => "0个或多个" + => "1个或多个"
  #(7)特定次数的重复,如指定子模式的具体重复次数 /\d{3}-\d{4}/
  #也可指定一个范围/\d{1,10}/
  #单个数值后面跟一个逗号用于指定最小重复数(n或更多重复次数),如/\d{3,}/
  #(8)断言和锚都不会消耗任何字符.相反,它们表示一个限制条件,这个条件必须满足才能继续进行字符的匹配.
  #^ => "行首"   $ => "行尾"  \A =>字符串的开始  \z => 字符串的结尾  \Z => 字符串的结尾(不包括最后的换行符) \b => 单词边界
  #(9)修饰语它是一个字母,它位于正则表达式最后那个用于结束正则表达式的正斜杠的后面:
  #/abc/i 这里的i使得设计该正则表达式的匹配操作大小写不敏感.
  #/abc/m 这里的m使得圆点通配符可以与任何字符相匹配,包括换行符.
  #(10)scan方法从左到右扫描一个字符串,重复地进行测试以寻找指定模式的各个匹配,结果返回到一个数组中.
  #如"testing 1 2 3 testing 4 5 6".scan(/\d/)  => %w(1 2 3 4 5 6 )
  #(11)split方法会将一个字符串分割为几个子字符串,并返回到一个数组中.
  #"Ruby".split(//) => %w(R u b y)
  #(12)grep方法把与作为参数提供的正则表达式匹配的所有元素返回到一个数组(或者其他可枚举的对象)
  #["USA", "UK", "France", "Germany"].grep(/[a-z]/) => ["France", "Germany"]

相关推荐

Global site tag (gtag.js) - Google Analytics