- 浏览: 1403606 次
- 性别:
- 来自: 火星
文章分类
最新评论
-
aidd:
内核处理time_wait状态详解 -
ahtest:
赞一下~~
一个简单的ruby Metaprogram的例子 -
itiProCareer:
简直胡说八道,误人子弟啊。。。。谁告诉你 Ruby 1.9 ...
ruby中的类变量与类实例变量 -
dear531:
还得补充一句,惊群了之后,数据打印显示,只有一个子线程继续接受 ...
linux已经不存在惊群现象 -
dear531:
我用select试验了,用的ubuntu12.10,内核3.5 ...
linux已经不存在惊群现象
无语了,写好的blog,不小心按了刷新键,全没了........
7 使用字符类
字符类也就是包裹在中括号里面的一堆字符.他所匹配的是中括号里面的任意一个字符。
要注意在他里面的那些特殊字符比如.?之类的将全部只能表示他们字面上的意思,而\n之类的能正常转义
^表示非
-表示区间
如果要在字符类中使用[ - ]那么就必学用\将他们转义
posix字符,比如[:digit:]表示数字,[:^digit:]表示 非数字
更简短的一些写法\d(匹配数字),\w(匹配组词字符),\s(匹配空格),小写的字母变成大写就是非.
9 扩展正则表达式
如果一个正则表达式太长,太复杂,我们想将它变成多行,并且加上注释,这时我们可以使用x修饰符,他会忽略 换行和空格,这样将使我们的表达式更可读:
10 用点匹配换行
一般情况下我们的.智能匹配除了换行之外的所有字符,当我们加上m修饰符,他就能匹配多航了:
11 使用嵌套的修饰符
我们如果只想在一个正则表达式的一部分使用修饰符,我们可以使用(?option)和(?-option)来打开和关闭修饰符
12使用嵌套的字表达式
我们使用?>来表示字表达式,这边注意的是,字表达式他是贪婪的,而且是不能回朔的。我们看下面的例子
看最后一个匹配,re2由于是贪婪匹配,会先匹配到abcccc,这时他要匹配下一个cdef的时候,由于他不能回朔,因此匹配失败.
13 ruby 和Oniguruma
Oniguruma是ruby1.9的内置正则表达式引擎。
他和Japanized GNU regex 也就是ruby1.8内置的正则表达式引擎的区别可以看下面的:
更详细的信息,可以去他的官方网站看文档:
http://oniguruma.rubyforge.org/oniguruma/
如果你想要学习更多的正则表达式的知识,最好还是去看那本Mastering Regular Expressions..
7 使用字符类
字符类也就是包裹在中括号里面的一堆字符.他所匹配的是中括号里面的任意一个字符。
[aeiou] #匹配 a,e,i,o,u中的任意一个字符
要注意在他里面的那些特殊字符比如.?之类的将全部只能表示他们字面上的意思,而\n之类的能正常转义
[a?si\n] #由于?在这里只能表示字面意思,所以这个匹配 a,?,s,i中的任意一个
^表示非
[^ae] #匹配非a,e中的任意一个的字符
-表示区间
[a-z] #表示从a到z的任意一个字符
如果要在字符类中使用[ - ]那么就必学用\将他们转义
regess=/[a\-\[z]/ puts '-' =~ regess puts '[' =~ regess
posix字符,比如[:digit:]表示数字,[:^digit:]表示 非数字
s1 = "abc\007def" /[[:print:]]*/.match(s1) puts m1 = Regexp::last_match[0] # "abc" s2 = "abc123" /[[:^digit:]]*/.match(s2) puts m1 = Regexp::last_match[0] # "abc"
更简短的一些写法\d(匹配数字),\w(匹配组词字符),\s(匹配空格),小写的字母变成大写就是非.
9 扩展正则表达式
如果一个正则表达式太长,太复杂,我们想将它变成多行,并且加上注释,这时我们可以使用x修饰符,他会忽略 换行和空格,这样将使我们的表达式更可读:
regex = / ^ # Beginning of string ((No\.?)\s+)? # Optional: No[.] \d+ \s+ # Digits and spacing ((\w|[.'-])+ # Street name... may be \s* # multiple words. )+ (,\s* # Optional: Comma etc. (Apt\.?|Suite|\#) # Apt[.], Suite, # \s+ # Spacing (\d+|[A-Z]) # Numbers or single letter )? $ # End of string /x
10 用点匹配换行
一般情况下我们的.智能匹配除了换行之外的所有字符,当我们加上m修饰符,他就能匹配多航了:
str1 = "Wolf 359" str = "Rubies are red\nAnd violets are blue.\n" pat1 = /red./ pat2 = /red./m pat3 = /^And./m puts str =~ pat1 # nil puts str =~ pat2 # 11 puts str =~ pat3 # 11
11 使用嵌套的修饰符
我们如果只想在一个正则表达式的一部分使用修饰符,我们可以使用(?option)和(?-option)来打开和关闭修饰符
reges=/abc(?i)def/ #匹配def时,打开大小写无关 puts "abcDEF" =~ reges # 0 puts "AbcDEF" =~ reges #nil reges=/ab(?i)cd(?-i)ef/ #匹配cd时,打开大小写无关 puts "abCdef" =~ reges #0 puts "abCdEf" =~ reges #nil reges=/abc(?i-m).*/m #匹配.*时打开大小写无关,关闭多行模式
12使用嵌套的字表达式
我们使用?>来表示字表达式,这边注意的是,字表达式他是贪婪的,而且是不能回朔的。我们看下面的例子
str = "abccccdef" re1 = /(abc*)cdef/ re2 = /(?>abc*)cdef/ puts re1 =~ str # 0 puts re2 =~ str # nil puts re1.match(str).to_a # ["abccccdef", "abccc"] puts re2.match(str).to_a # []
看最后一个匹配,re2由于是贪婪匹配,会先匹配到abcccc,这时他要匹配下一个cdef的时候,由于他不能回朔,因此匹配失败.
13 ruby 和Oniguruma
Oniguruma是ruby1.9的内置正则表达式引擎。
他和Japanized GNU regex 也就是ruby1.8内置的正则表达式引擎的区别可以看下面的:
引用
add character property (\p{property}, \P{property})
add hexadecimal digit char type (\h, \H)
add look-behind
(?<=fixed-char-length-pattern), (?<!fixed-char-length-pattern)
add possessive quantifier. ?+, *+, ++
add operations in character class. [], &&
(’[’ must be escaped as an usual char in character class.)
add named group and subexp call.
octal or hexadecimal number sequence can be treated as a multibyte code char in character class if multibyte encoding is specified.
(ex. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])
allow the range of single byte char and multibyte char in character class.
ex. [a-<<any EUC-JP character>>] in EUC-JP encoding.
effect range of isolated option is to next ’)’. ex. (?:(?i)a|b) is interpreted as (?:(?i:a|b)), not (?:(?i:a)|b).
isolated option is not transparent to previous pattern. ex. a(?i)* is a syntax error pattern.
allowed incompleted left brace as an usual string. ex. /{/, /({)/, /a{2,3/ etc…
negative POSIX bracket [:^xxxx:] is supported.
POSIX bracket [:ascii:] is added.
repeat of look-ahead is not allowed. ex. (?=a)*, (?!b){5}
Ignore case option is effective to numbered character. ex. <code>/\x61/i =~ "A"<code>
In the range quantifier, the number of the minimum is omissible.
<code>/a{,n}/ == /a{0,n}/<code>
The simultanious abbreviation of the number of times of the minimum and the maximum is not allowed. (/a{,}/)
<code>a{n}?<code> is not a non-greedy operator. <code>/a{n}?/ == /(?:a{n})?/<code>
invalid back reference is checked and cause error. /\1/, /(a)\2/
Zero-length match in infinite repeat stops the repeat, then changes of the capture group status are checked as stop condition.
/(?:()|())*\1\2/ =~ ""
/(?:\1a|())*/ =~ "a"
add hexadecimal digit char type (\h, \H)
add look-behind
(?<=fixed-char-length-pattern), (?<!fixed-char-length-pattern)
add possessive quantifier. ?+, *+, ++
add operations in character class. [], &&
(’[’ must be escaped as an usual char in character class.)
add named group and subexp call.
octal or hexadecimal number sequence can be treated as a multibyte code char in character class if multibyte encoding is specified.
(ex. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])
allow the range of single byte char and multibyte char in character class.
ex. [a-<<any EUC-JP character>>] in EUC-JP encoding.
effect range of isolated option is to next ’)’. ex. (?:(?i)a|b) is interpreted as (?:(?i:a|b)), not (?:(?i:a)|b).
isolated option is not transparent to previous pattern. ex. a(?i)* is a syntax error pattern.
allowed incompleted left brace as an usual string. ex. /{/, /({)/, /a{2,3/ etc…
negative POSIX bracket [:^xxxx:] is supported.
POSIX bracket [:ascii:] is added.
repeat of look-ahead is not allowed. ex. (?=a)*, (?!b){5}
Ignore case option is effective to numbered character. ex. <code>/\x61/i =~ "A"<code>
In the range quantifier, the number of the minimum is omissible.
<code>/a{,n}/ == /a{0,n}/<code>
The simultanious abbreviation of the number of times of the minimum and the maximum is not allowed. (/a{,}/)
<code>a{n}?<code> is not a non-greedy operator. <code>/a{n}?/ == /(?:a{n})?/<code>
invalid back reference is checked and cause error. /\1/, /(a)\2/
Zero-length match in infinite repeat stops the repeat, then changes of the capture group status are checked as stop condition.
/(?:()|())*\1\2/ =~ ""
/(?:\1a|())*/ =~ "a"
更详细的信息,可以去他的官方网站看文档:
http://oniguruma.rubyforge.org/oniguruma/
如果你想要学习更多的正则表达式的知识,最好还是去看那本Mastering Regular Expressions..
发表评论
-
一个创建闭包的小技巧
2008-06-05 00:12 2154一个小技巧,在Ola Bini 的blog上看到的。 假设你 ... -
解决Colored Cubes问题
2008-06-02 10:43 2802Engineering Puzzle You have fo ... -
ruby1.9中的Iterators
2008-03-05 22:37 3728在ruby1.9中增加了External Iterators这 ... -
一个简单的ruby Metaprogram的例子
2008-03-03 23:49 4113比如下面一个文件 people.txt 引用name,age ... -
Ruby Object Model
2008-03-03 19:29 3595刚好看到,保存一下. -
一个检测方法的参数类型的小程序
2008-03-02 22:48 3252今天没事看blog的时候,看到一个小子实现了这个,不过他的程序 ... -
rails中的BlankSlate源码分析
2008-02-28 23:27 3471其实这个类实现的功能很简单,那就是实现一个没有predefin ... -
ruby中的类变量与类实例变量
2008-02-26 21:15 7645首先,在ruby1.8中类变量是所有子类和父类共享的,可以看下 ... -
在ubuntu上共存多个版本的ruby
2008-02-24 15:20 4381今天装Revactor库的时候,真把我郁闷了,没想到ubunt ... -
看到了一个用ruby写的scheme解释器
2008-02-16 21:35 3790,自己本来想等啥时候有时间做个类似的东西呢,没想到已经有人做 ... -
ruby way之处理RSS和Atom
2008-01-31 01:32 35301 rss 标准库 RSS 是基于xml的,因此你能简单的将 ... -
ruby way之使用REXML解析xml
2008-01-30 00:35 9279REXML 是一个完全用ruby写的processor ,他有 ... -
rails2中的一些被废弃的用法
2008-01-29 00:33 2546这些只是自己最近看web开发敏捷之道的时候(由于书中的版本是1 ... -
ruby way之动态特性之二
2008-01-25 00:49 37061 得到所定义的实体的列表 ruby的反射api能够使我们在 ... -
ruby way之动态特性之一
2008-01-23 01:25 45681 动态的evaluate代码 全局的方法eval 编译并且 ... -
ruby way之高级OOP特性之二
2008-01-20 03:43 29661 把代码像对象一样存储 当你想要以对象的形式存储一块代码的 ... -
ruby way之高级OOP特性之一
2008-01-19 12:14 22931 发送一条消息给一个对象 当你调用一个方法时,你也就是发送 ... -
ruby way之OOP之二
2008-01-16 23:59 23711 理解allocate 在一些特殊的环境中,你可能需要不调 ... -
ruby way之OOP之一
2008-01-16 00:25 26621 使用多个构造方法 在ruby中没有像c++或者ruby中 ... -
ruby way之连接数据库
2008-01-14 00:47 2482这边都只是个大概,具体的要自己去看文档了. 1 连接SQLi ...
相关推荐
2. **基础数据类型操作**:这部分内容涵盖了数字、字符串、正则表达式以及日期等低级数据类型的处理方法。 3. **正则表达式引擎(Oniguruma)**:介绍了一种新的正则表达式处理引擎,提高了处理效率和灵活性。 4. ...
Ruby的标准库非常丰富,书中会介绍一些常用的库,如Net::HTTP用于网络请求,JSON和YAML用于数据序列化,Regexp用于正则表达式匹配,以及Open3和PTY用于进程管理和交互。这些库大大扩展了Ruby的功能,使其在各种场景...
它覆盖了Ruby的基础语法、类和对象、模块、集合、文件和I/O、网络编程、正则表达式、线程和并发、元编程等方面,以及如何利用Gem进行项目开发。无论是初学者还是有经验的开发者,都能从中受益,提升Ruby编程技能。
它深入探讨了Ruby语言的各种特性,包括基础语法、面向对象编程、模块和类、异常处理、文件系统操作、网络编程以及正则表达式等。书中的例子丰富,旨在帮助读者理解并掌握Ruby的精髓,从而能以"Ruby Way"的方式来思考...
数组、字符串、正则表达式和迭代器、代码块、闭包是Ruby语言在实际编程中不可或缺的部分,掌握它们对于高效编程是必不可少的。 最后,元编程部分将探讨Ruby语言中动态添加方法和属性,以及操作类和模块的能力,这是...
- **字符串处理**:提供丰富的字符串处理功能,如字符串插值、多行字符串、正则表达式等。 - **异常处理**:支持异常处理机制,能够捕获并处理程序运行时出现的异常情况。 #### 应用领域 - **Web开发**:Ruby最...
更简单的正则表达式,正则表达式是处理字符串的强大工具,这里强调了其在解决特定问题时的简化应用。 #### 42. PHP Solution PHP解决方案,展示了PHP语言在Web开发领域解决问题的能力和灵活性。 #### 43. Another...