浅析Ruby中的正则表达式的使用_ruby专题

    如果只是需要中查找字符串的 text, 不要使用正则表达式:string['text']

    针对简单的结构, 你可以直接使用string[/RE/]的方式来查询.

  match = string[/regexp/]       # get content of matched regexp
  first_group = string[/text(grp)/, 1] # get content of captured group
  string[/text (grp)/, 1] = 'replace' # string => 'text replace'

    当你不需要替结果分组时,使用非分组的群组。

  /(first|second)/  # bad
  /(?:first|second)/ # good

    不要使用 Perl 遗风的变量来表示匹配的正则分组(如 $1,$2 等),使用 Regexp.last_match[n] 作为替代。

  /(regexp)/ =~ string
  ...

  # bad
  process $1

  # good
  process Regexp.last_match[1]

    避免使用数字化命名分组很难明白他们代表的意思。命名群组来替代。

  # bad
  /(regexp)/ =~ string
  ...
  process Regexp.last_match[1]

  # good
  /(?<meaningful_var>regexp)/ =~ string
  ...
  process meaningful_var

    字符类有以下几个特殊关键字值得注意: ^, -, \, ], 所以, 不要转义 . 或者 [] 中的括号。

    注意, ^ 和 $ , 他们匹配行首和行尾, 而不是一个字符串的结尾, 如果你想匹配整个字符串, 用 \A 和 \Z。

  string = "some injection\nusername"
  string[/^username$/]  # matches
  string[/\Ausername\Z/] # don't match

    针对复杂的正则表达式,使用 x 修饰符。可提高可读性并可以加入有用的注释。只是要注意空白字符会被忽略。

  regexp = %r{
   start     # some text
   \s      # white space char
   (group)    # first group
   (?:alt1|alt2) # some alternation
   end
  }x

    sub/gsub 也支持哈希以及代码块形式语法, 可用于复杂情形下的替换操作.

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索正则表达式
ruby
ruby正则表达式、ruby gsub 正则表达式、ruby 正则表达式 匹配、ruby 正则表达式 变量、ruby 正则表达式 贪婪,以便于您获取更多的相关知识。

时间: 2024-10-02 05:20:48

浅析Ruby中的正则表达式的使用_ruby专题的相关文章

简单的Ruby中的Socket编程教程_ruby专题

Ruby提供了两个级别访问网络的服务,在底层你可以访问操作系统,它可以让你实现客户端和服务器为面向连接和无连接协议的基本套接字支持. Ruby 统一支持应用程的网络协议,如FTP.HTTP等. 不管是高层的还是底层的.ruby提供了一些基本类,让你可以使用TCP,UDP,SOCKS等很多协议交互,而不必拘泥在网络层.这些类也提供了辅助类,让你可以轻松的对服务器进行读写. 接下来就让我们来学习如何进行 Ruby Socket 编程什么是 Sockets 应用层通过传输层进行数据通信时,TCP和UD

实例讲解Ruby中的五种变量_ruby专题

Ruby 全局变量 全局变量以 $ 开头.未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告. 给全局变量赋值会改变全局状态,所以不建议使用全局变量. 下面的实例显示了全局变量的用法. #!/usr/bin/ruby $global_variable = 10 class Class1 def print_global puts "Global variable in Class1 is #$global_variable" end end class Class2 d

举例讲解Ruby中require的使用方法_ruby专题

同一目录下的文件,如/usr/local/ruby/foo.rb与/usr/local/ruby/bar.rb两个文件. 如果直接在foo.rb中   require 'bar' 执行时会报找不到bar.rb错误. 这是因为运行   /home/oldsong$ ruby /usr/local/ruby/foo.rb 时会在ruby安装的lib目录和/home/oldsong/目录下查找bar.rb.而不会去rb文件的目录/usr/local/ruby/下查找. 所以除引用系统rb外,requi

Ruby中的集合编写指南_ruby专题

倾向数组及哈希的字面表示法(除非你需要传递参数到它们的构造函数中). # bad arr = Array.new hash = Hash.new # good arr = [] hash = {}     当你需要元素为单词(没有空格和特殊符号)的数组的时候总是使用 %w 的方式来定义字符串数组.应用这条规则仅仅在两个或多个数组. # bad STATES = ['draft', 'open', 'closed'] # good STATES = %w(draft open closed)   

解读Ruby中注释的使用方法_ruby专题

 Ruby行内注释的代码在运行时被忽略.单行注释#字符开始,他们从#到行末如下: #!/usr/bin/ruby -w # This is a single line comment. puts "Hello, Ruby!" 上述程序执行时,会产生以下结果: Hello, Ruby! Ruby的多行注释 可以注释掉多行使用 =begin 和 =end 语法如下: #!/usr/bin/ruby -w puts "Hello, Ruby!" =begin This i

举例讲解Ruby中迭代器Iterator的用法_ruby专题

Iterator 定义 A Ruby iterator is simple a method that can invoke a block of code.         Block 一般是跟着 method 出现的, 并且 block 中的代码不一定会执行         如果 method 中有 yield, 那么它的block 中的代码会被执行         Block 可以接收参数,和返回 value def two_times yield yield end two_times

在Ruby中查找和执行方法_ruby专题

当调用一个方法时,Ruby会做两件事. 1.找到这个方法.这个方法称为方法查找. 2.执行这个方法.为了做到这点,Ruby需要一个叫做self的东西. 这样的一个过程--发现一个方法再执行之--在每种面向对象语言中都会发生.不过,对于像Ruby这样非常动态的语言,深入理解这个过程显得尤为重要.你有没有好奇过一个方法究竟定义在哪里呢?如果有,那绝对应该深入理解方法查找及self. 当调用一个方法时,Ruby会在对象的类中查找那个方法.不过,在给出更复杂的例子之前,你需要了解两个新概念:接收者(re

Ruby中的字符串编写示例_ruby专题

优先使用 字符串插值 来代替 字符串串联. # bad email_with_name = user.name + ' <' + user.email + '>' # good email_with_name = "#{user.name} <#{user.email}>" # good email_with_name = format('%s <%s>', user.name, user.email)     Consider padding st

Ruby中case表达式详解_ruby专题

Ruby的case表达式有两种形式: 第一种形式接近于一组连续的if语句:它让你列出一组条件,并执行第一个为真的条件表达式所对应的语句. 第二种形式,在case语句的顶部指定一个目标,而每个when从句列出一个或者多个比较条件 和if一样,case返回执行的最后一个表达式的值:而且如果表达式和条件在同一行上的话,可以用then关键字来加以区分.