ruby regexp怎么匹配uuid字符串

Python013

ruby regexp怎么匹配uuid字符串,第1张

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

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

Regexp::IGNORECASE

Regexp::MULTILINE

Regexp::EXTENDED

若第二参数并非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)。若匹配失败或者string为nil时,返回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是因为考虑到可能会出现匹配失败的情况。)

正如你所知道的,ruby字符串被称为一流的对象,它使用了大量的查询和操作方法。一个最基本的字符串操作是把一个字符串分割成多个子字符串。如果你有一个字符串,如“foo, bar, baz”而你希望的是这样三个字符串“foo”,“bar”,“baz”。那么字符串类的split方法就可以帮助你。 “split”的基本用法 split方法的最基本用法分裂一个由单独字符或字符的静态序列组成的字符串。如果split的第一个变量是一个字符串,那么这个字符串中字符就会被当作一个字符串分隔符使用。但是在逗号分隔的数据中,逗号用来分隔数据,这里的每个字符串成分都被用来分隔数据。 #!/usr/bin/env rubystr =foo,bar,bazputsstr. split(,)$ ./1.rbfoobarbaz通过正则表达式来增加灵活性 当然,还有一些更容易的方法可以分隔字符串。正则表达式可以为split方法增加灵活性。这里再次拿“foo, bar, baz”。间隔在第一个逗号之后而不是第二个逗号。如果该字符串“,”被当成是分隔符,那么在“baz”字符串的开始处仍然会存在间隔。如果使用“,”字符串,它只与第一个逗号匹配,因为第二个逗号后面没有间隔。其作用还是有限的。 解决这个问题的办法是把正则表达式作为定界符的自变量,而不是使用字符串。正则表达式不仅可以匹配静态序列的字符,对字符的不定量和可选字符都同样起作用。 编写正则表达式 为你的分隔符编写一个正则表达式,第一步就是描述清楚什么是分隔符。在这种情况下,一个逗号后面可能存在一个或多个空格是合理的。这一正则表达式库中存在两个要素:逗号和可选的间隔。间隔会使用* (星号)量词,它表示的意思是“零或更多”。任何在它之前的要素都会匹配零次或若干次。例如,正则表达式/ a * /将匹配序列零或更多“a”字符。 #!/usr/bin/env rubystr =foo, bar,bazputsstr. split( /, */ )$ ./2.rbfoobarbaz限制splits的数量 想象一个逗号分隔了这样的字符串:“10,20,30,this is an arbitary string”。其格式是三个数字后面跟了一句评论。此评论可以包含任意的文本,包括带有逗号的文本。要防止split分离文本这个文本,我们可以设置一个最大分裂列数。请注意,只有在任意文本的评论字符串处在表格最后一列时才管用。 为了限制splits的数量,字符串中数域的数量要作为split方法的第二个变量来发送。 #!/usr/bin/env rubystr =10,20,30,ten, twenty and thirtyputsstr. split( /, */, 4 )$ ./3.rb102030en, twentyandthirty了解其局限性 分裂法有一些局限性。以字符串“10,20, ‘bob, eve and mallory’,30”为例。预期字符是两个数字,后跟一个引证串(可能包含逗号),然后是另一个数字。split不能正确分隔这个字符串的域。为了做到正确分隔,需要保持字符串扫描器处于开启状态,这样一来它就会记得它有没有在引证串内部。反之,如果扫描仪不在启动状态,就不能解决这样的问题。