本文共 6922 字,大约阅读时间需要 23 分钟。
[1] pry(main)> "Do you like cats?" =~ /like/=> 7[2] pry(main)> "Do you like cats?" =~ /lie/=> nil[3] pry(main)> "Do you like cats?".match(/like/)=> #[4] pry(main)> "Do you like cats?".match(/lie/)=> nil
[1] pry(main)> "test" =~ /[aeiou]/=> 1[2] pry(main)> "sky" =~ /[aeiou]/=> nil
[4] pry(main)> "The year is 2020" =~ /[0-9]/=> 12[5] pry(main)> "The cat is black" =~ /[0-9]/=> nil
[11] pry(main)> "5a5" =~ /\d.\d/=> 0[12] pry(main)> "5a5" =~ /\d\.\d/=> nil[13] pry(main)> "5.5" =~ /\d\.\d/=> 0
[14] pry(main)> "192.168.1.1" =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/=> 0[15] pry(main)> "0000.0000" =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/=> nil
[16] pry(main)> "Regex are cool" =~ /\w/=> 0[17] pry(main)> "Regex are cool" =~ /\w{4}/=> 0[18] pry(main)> "Regex are cool" =~ /^\w{4}$/=> nil
[2] pry(main)> "12:41 INFO User has logged in." =~ /(\d{2}:\d{2}) (\w+) (.*)/=> 0[4] pry(main)> "12:41 INFO User has logged in.".match(/(\d{2}:\d{2}) (\w+) (.*)/)=> #[5] pry(main)> $1=> "12:41"[6] pry(main)> $2=> "INFO"[7] pry(main)> $3=> "User has logged in."------------------------------------------------------------[13] pry(main)> aa = "12:41 INFO User has logged in.".match(/(\d{2}:\d{2}) (\w+) (.*)/)=> # [14] pry(main)> aa[0]=> "12:41 INFO User has logged in."[15] pry(main)> aa[1]=> "12:41"[16] pry(main)> aa[2]=> "INFO"[17] pry(main)> aa[3]=> "User has logged in."[18] pry(main)> aa[4]=> nil------------------------------------------------------------# 使用 (?:) 过滤不需要捕获的模式[7] pry(main)> aa = "12:41 INFO User has logged in.".match(/(\d{2}:\d{2}) (\w+) (.*)/)=> # [8] pry(main)> aa = "12:41 INFO User has logged in.".match(/(\d{2}:\d{2}) (?:\w+) (.*)/)=> # [9] pry(main)> aa = "12:41 INFO User has logged in.".match(/(\d{2}:\d{2}) \w+ (.*)/)=> #
[22] pry(main)> "ABCDEFGH".match /.C/=> #[23] pry(main)> $`=> "A"[24] pry(main)> $&=> "BC"[25] pry(main)> $'=> "DEFGH"
[33] pry(main)> m = "David 30".match /(?\w+) (? \d+)/=> # [34] pry(main)> m[:name]=> "David"[35] pry(main)> m[:age]=> "30"[36] pry(main)> $1=> "David"[37] pry(main)> $2=> "30"
用 =~ 进行匹配无法在其他地方用命名使用匹配组,命名数组的结果会返回一个 MatchData 对象,可通过这个对象读取结果。
[64] pry(main)> regexp = Regexp.new("(?<=\w) (\d+)")=> /(?<=w) (d+)/[65] pry(main)> %r((?<=\w) (\d+))=> /(?<=\w) (\d+)/[66] pry(main)> %r[(?<=\w) (\d+)]=> /(?<=\w) (\d+)/[67] pry(main)> %r!(?<=\w) (\d+)!=> /(?<=\w) (\d+)/
Options | Option constants | Description |
---|---|---|
i | Regexp::IGNORECASE | 大小写不敏感 |
m | Regexp::MULTILINE | . 可以匹配换行符 |
x | Regexp::EXTENDED | 忽略表达式中的空格 |
[145] pry(main)> "abc" =~ /[A-Z]/=> nil[146] pry(main)> "abc" =~ /[A-Z]/i=> 0[101] pry(main)> "abc".match?(/[A-Z]/)=> false[102] pry(main)> "abc".match?(/[A-Z]/i)=> true
[127] pry(main)> "hello\nworld" =~ /ll.*l/=> nil[128] pry(main)> "hello\nworld" =~ /ll.*l/m=> 2[141] pry(main)> "hello\nworld".match?(/ll.*l/)=> false[142] pry(main)> "hello\nworld".match?(/ll.*l/m)=> true
[137] pry(main)> "hello world" =~ /w o/=> nil[138] pry(main)> "hello world" =~ /w o/x=> 6[143] pry(main)> "hello world".match?(/w o/)=> false[144] pry(main)> "hello world".match?(/w o/x)=> true
[107] pry(main)> LOG_FORMAT = %r{[107] pry(main)* (\d{2}:\d{2}) # Time[107] pry(main)* \s(\w+) # Event type[107] pry(main)* \s(.*) # Message[107] pry(main)* }x=> / (\d{2}:\d{2}) # Time \s(\w+) # Event type \s(.*) # Message/x[108] pry(main)> "12:41 INFO User has logged in.".match LOG_FORMAT=> #[109] pry(main)> $1=> "12:41"[110] pry(main)> $2=> "INFO"[111] pry(main)> $3=> "User has logged in."
匹配字符串中所有满足表达式的选项
匹配字符串的所有词
[112] pry(main)> "this is some string".scan(/\w+/)=> ["this", "is", "some", "string"]
匹配字符串的所有数字
[114] pry(main)> "The year was 1492.".scan(/\d+/)=> ["1492"]
大写所有词的首字母
[118] pry(main)> "lord of the rings".gsub(/\w+/){|word| word.capitalize}=> "Lord Of The Rings"
验证给定的邮件地址
[122] pry(main)> !!"Looking@example.com".match(/\A[\w.+-]+@\w+\.\w+\z/)=> true[123] pry(main)> !!"Looking@examplecom".match(/\A[\w.+-]+@\w+\.\w+\z/)=> false[124] pry(main)> !!"Lookingexample.com".match(/\A[\w.+-]+@\w+\.\w+\z/)=> false[125] pry(main)> "Lookingexample.com".match?(/\A[\w.+-]+@\w+\.\w+\z/)=> false
[17] pry(main)> "hello rubyy".match /ruby?/=> #[18] pry(main)> "hello rub".match /ruby?/=> #
[19] pry(main)> "hello rubty".match /ruby*/=> #[20] pry(main)> "hello rub".match /ruby*/=> # [21] pry(main)> "hello rubyy".match /ruby*/=> #
[24] pry(main)> "hello rub".match /ruby+/=> nil[25] pry(main)> "hello ruby".match /ruby+/=> #
[26] pry(main)> "5 days".match /\d{3}/=> nil[27] pry(main)> "567 days".match /\d{3}/=> #[28] pry(main)> "5679 days".match /\d{3}/=> # [29] pry(main)> "5679 days".match /\d{3,}/=> # [33] pry(main)> "5679 days".match /\d{3,5}/=> # [34] pry(main)> "567890 days".match /\d{3,5}/=> #
[35] pry(main)> " perl>".match /<.*>/=> #perl>">[36] pry(main)> " perl>".match /<.*?>/=> # ">
[39] pry(main)> "Ruby&Rails Ruby&rails".match /([Rr])?uby&\1ails/=> #
[64] pry(main)> phone = "138-3453-1111 #这是一个电话号码"=> "138-3453-1111 #这是一个电话号码"[65] pry(main)> phone.sub!(/#.*$/, "") => "138-3453-1111 "[66] pry(main)> phone.gsub!(/\D/, "") => "13834531111"[69] pry(main)> text = "rails 是 rails, Ruby on Rails 非常好的 Ruby 框架"=> "rails 是 rails, Ruby on Rails 非常好的 Ruby 框架"[70] pry(main)> text.gsub!("rails", "Rails")=> "Rails 是 Rails, Ruby on Rails 非常好的 Ruby 框架"[71] pry(main)> text = "rails 是 rails, Ruby on Rails 非常好的 Ruby 框架"=> "rails 是 rails, Ruby on Rails 非常好的 Ruby 框架"[72] pry(main)> text.gsub!(/\brails\b/, "Rails")=> "Rails 是 Rails, Ruby on Rails 非常好的 Ruby 框架"[76] pry(main)> text = "rails 是rails, Ruby on Rails 非常好的 Ruby 框架"=> "rails 是rails, Ruby on Rails 非常好的 Ruby 框架"[77] pry(main)> text.gsub!(/\brails\b/, "Rails")=> "Rails 是rails, Ruby on Rails 非常好的 Ruby 框架"
[46] pry(main)> "ruby??".match /ruby(!+|\?)/=> #[47] pry(main)> "ruby??".match /ruby[!+|\?]/=> # [48] pry(main)> "ruby".match /ruby[!+|\?]/=> nil[49] pry(main)> "ruby!".match /ruby[!+|\?]/=> #
实例 | 描述 |
---|---|
/^Ruby/ | 匹配以 "Ruby" 开头的字符串或行 |
/Ruby$/ | 匹配以 "Ruby" 结尾的字符串或行 |
/\ARuby/ | 匹配以 "Ruby" 开头的字符串 |
/Ruby\Z/ | 匹配以 "Ruby" 结尾的字符串 |
/\bRuby\b/ | 匹配单词边界的 "Ruby" |
/\brub\B/ | \B 是非单词边界:匹配 "rube" 和 "ruby" 中的 "rub",但不匹配单独的 "rub" |
/Ruby(?=!)/ | 如果 "Ruby" 后跟着一个感叹号,则匹配 "Ruby" |
/Ruby(?!!)/ | 如果 "Ruby" 后没有跟着一个感叹号,则匹配 "Ruby" |
[53] pry(main)> "Ruby".match /Ruby(?!!)/=> #[54] pry(main)> "Ruby!".match /Ruby(?!!)/=> nil[55] pry(main)> "Ruby!".match /Ruby(?=!)/=> # [56] pry(main)> "Ruby".match /Ruby(?=!)/=> nil[60] pry(main)> "Ruby".match /\bRub\B/=> # [61] pry(main)> "Rub".match /\bRub\B/=> nil[62] pry(main)> " Rub".match /\bRub\B/=> nil[63] pry(main)> " Ruby".match /\bRub\B/=> #
转载地址:http://ujjqi.baihongyu.com/