• ruby中Regexp用法


    Regexp

    正则表达式的类。正则表达式的字面值是以双斜线内夹表达式的形式生成的。

    /^this is regexp/
    

    还可以使用Regexp.new(string)来动态地生成正则表达式对象。

    超类:

    类方法:

    Regexp.compile(string[, option[, code]])
    Regexp.new(string[, option[, code]])

    编译string后生成并返回一个正则表达式对象。

    若第二参数是Fixnum的话,其值可以任选下列中的若干项

    若第二参数并非Fixnum,则被看作是布尔值。若为真(nil,false以外的值)的话,其效果等同于指定了Regexp::IGNORECASE

    若指定了第三参数的话,进行匹配时将使用指定的字符编码而不受$KCODE的影响。字符编码只取决于字符串参数的首字符,这同给$KCODE赋值时的原则是一致的。

    若第一参数是正则表达式的话,将拷贝并返回一个内容相同(但是,上述标识的内容将被清楚)的正则表达式。此时将按照第二、第三参数的要求对复制的正则表达式进行设定。

    ruby 1.8 特性:若第一参数为正则表达式,则对其进行复制并返回复制结果。此时将忽略第二、第三参数的规定,但会出现警告。

    若正则表达式的编译失败,则引发RegexpError异常。

    Regexp.escape(string[,kcode])
    Regexp.quote(string[,kcode])

    string中的“特殊字符”前面插入转义字符(反斜线)后返回该字符串,这里的“特殊字符”是指那些在正则表达式中具有特殊意义的字符。此时,以可选参数kcode来设定字符串的字符编码(省略时使用$KCODE的值)。

    指定字符编码的方法与$KCODE相同。

    Regexp.last_match

    返回当前范围内的最后一次正则表达式匹配的MatchData对象。调用该方法与调用$~是一样的。

    /(.)(.)/ =~ "ab"
    p Regexp.last_match      # => #<MatchData:0x4599e58>
    p Regexp.last_match[0]   # => "ab"
    p Regexp.last_match[1]   # => "a"
    p Regexp.last_match[2]   # => "b"
    p Regexp.last_match[3]   # => nil
    
    Regexp.last_match([nth]) ((<ruby 1.7 特性>))

    若整数nth为0,则返回匹配的字符串($&)。除此以外,则返回与第nth个括号相匹配的部分字符串($1,$2,...)。若没有相应的括号或未完成匹配,则返回nil。

    /(.)(.)/ =~ "ab"
    p Regexp.last_match      # => #<MatchData:0x4599e58>
    p Regexp.last_match(0)   # => "ab"
    p Regexp.last_match(1)   # => "a"
    p Regexp.last_match(2)   # => "b"
    p Regexp.last_match(3)   # => nil
    

    若整个正则表达式都没有成功匹配时,无参数的Regexp.last_match会返回nil,因此last_match[1]就会引发NameError异常。而last_match(1)却返回nil

    Regexp.union([pattern, ...]) ((<ruby 1.8 特性>)) version 1.8.1 以后

    |将传给参数的pattern连起来之后,以Regexp的形式将其返回。只要与其中的一个pattern相匹配,就意味着与Regexp相匹配。

    p Regexp.union(/a/, /b/, /c/) #=> /(?-mix:a)|(?-mix:b)|(?-mix:c)/
    

    pattern可以是Regexp或String。若是String的话,则意味着要与该字符串本身相匹配,随后该pattern将被纳入Regexp之中。

    p Regexp.union("a", "?", "b") # => /a|?|b/
    p Regexp.union(/a/, "*") # => /(?-mix:a)|*/
    

    若没有任何参数时,则返回一个绝对不会匹配的Regexp。

    p Regexp.union() # => /(?!)/
    

    最终返回的Regexp的字符编码与传给参数的Regexp的字符编码相一致。若同时给出了若干个编译过的固定编码Regexp时,这些编码必须一致。若存在不同编码的Regexp时,将引发ArgumentError

    p Regexp.union(/a/e, /b/e) # => /(?-mix:a)|(?-mix:b)/e
    p Regexp.union(/a/e, /b/s) # => ArgumentError
    

    若同时存在固定编码Regexp和非固定编码Regexp时,最终返回的Regexp的编码以那个固定编码为准。

    p Regexp.union(/a/e, /b/) # => /(?-mix:a)|(?-mix:b)/e
    

    方法:

    self =~ string
    self === string

    string字符串进行正则表达式的匹配操作。若匹配成功则返回匹配位置的索引(首位为0)。若匹配失败或者stringnil时,返回nil

    内部变量$~中保存的是与匹配相关的信息。

    string既非nil又非String对象时,引发TypeError异常。

    ruby 1.7 特性:Regexp#=== 返回布尔值。若参数并非字符串或匹配失败则返回false,若匹配成功则返回true。

    ~ self

    $_变量的值之间进行匹配操作。等同于

    self =~ $_
    
    casefold?

    若编译正则表达式时不区分大小写,则返回真。

    kcode

    采用与$KCODE相同的形式返回编译正则表达式时的字符编码。若编译正则表达式时没有固定的编码(使用匹配时的$KCODE的值)时,返回nil。

    match(str)
    match(str, [pos]) ((<ruby 1.9 特性>))

    除去返回MatchData对象这点区别以外,它与self =~ str是相同的。匹配失败时返回nil。

    若只想得到与正则表达式相匹配的部分字符串时,可以

    bar = /foo(.*)baz/.match("foobarbaz").to_a[1]
    
    foo, bar, baz = /(foo)(bar)(baz)/.match("foobarbaz").to_a.indexes(1,2,3)
    

    这样。(之所以使用to_a是因为考虑到可能会出现匹配失败的情况。)

  • 相关阅读:
    python 修改excel
    python 正则表达式规则收集
    anusplina 4.36版本使用提示 说明
    python 汉字编码问题
    python IOError: [Errno 22] invalid mode ('r') or filename:
    将矩阵数据转换为栅格图 filled.contour()
    将数值矩阵映射为栅格图
    一脚踩进java之基础篇23——常用API(Object、String)
    一脚踩进java之基础篇22——面向对象 (不同修饰符使用细节)
    一脚踩进java之基础篇21——面向对象 (访问修饰符、代码块)
  • 原文地址:https://www.cnblogs.com/wangyuyu/p/3268314.html
Copyright © 2020-2023  润新知