<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>凌川__</title>
    <description></description>
    <link>http://kaichuan-zhang.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>变量一定要有类型吗（二）</title>
        <author>凌川__</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kaichuan-zhang.javaeye.com">凌川__</a>&nbsp;
          链接：<a href="http://kaichuan-zhang.javaeye.com/blog/56665" style="color:red;">http://kaichuan-zhang.javaeye.com/blog/56665</a>&nbsp;
          发表时间: 2007年03月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          变量一定要有类型吗（二）<br /><br /><br /><br />变量一定要有类型吗？不一定。<br /><br />在《The Ruby Way 2nd》一书中，1.2.3节 Constants, Variables, and Types<br />“In Ruby, variables do not have types, but the objects they refer to still have types. ” 在Ruby中，变量没有类型，但变量引用的对象有类型。<br />1.5.2节 Perspectives in Programming<br />“In Ruby, variables don't have classes; only values have classes.” Ruby里, 变量没有类别；只有值才有类别。<br /><br />《The Ruby Way 2nd》所描述是真的吗？口说无凭，程序为证。<br /><pre name="code" class="ruby">
a=5
puts  "a = #{a},  #{a.class}"   # => a = 5,  Fixnum

a="hh"    # a: 5 --> "hh"
puts  "a = #{a},  #{a.class}"   # => a = hh,  String
</pre><br />变量a只是一个符号，当a指向一个表达式的时候，那个表达式的值也许是Fixnum，也许是String。变量a并没有什么事先预定的类型；而且变量a在事后也不会固定在什么具体的类型上。<br /><pre name="code" class="ruby">
a = x==nil ? 2 : x**2 &lt; x&lt;&lt;2  ? 2.0 : ""
puts a.class
</pre><br />你能告诉我，变量a是什么类型吗？你如果问我，我只能说：<br />假设x = 2，程序输出为Float；<br />假设x = 4，程序输出为String；<br />假如x 是一个无返回值的方法，程序输出为Fixnum。<br /><br />Gödel在证明不完备性定理时，用一个正整数指代某个数值；用另一个正整数指代某个运算符；而且，公式也用正整数指代；定理也用正整数指代…正整数只是符号，数值、运算符、公式、定理有区别，正整数没有类型差别。<br /><br />变量只是符号，变量没有类型你如果不能接受，那么，我们自小熟悉的正整数只是代表不同类事物的符号，也许会让你发疯。<br /><br />完备性、一致性、可证性似乎与主题不相关，其实，计算机编程语言是形式数学的直接产物。最初的LISP语言哪里有变量类型的概念，从C一路走来，到C++，到Java，变量的概念中塞入了太多的东西。一个子类拥有许许多多的内容，它父类的父类，最初的根类，只是一个符号。<br /><br />你也许认为，变量有类型拓展了我们表达事物的能力，可事实是，如今Java程序、C++程序所作的并没有超越Turing当初的构想。假如某个语言因为变量有类型而实现了智能化，请你一定，一定要mail me。<br /><br />人们在编程语言的道路上行走了几十年，跌跌绊绊，缝缝补补，没能见到希望中的曙光。这一切的努力是有意义的，但也许应该回到起初的地方，认真审视，重新选择方向。Ruby是一个值得去做的尝试。<br /><br />A). Rails框架充分发挥了Ruby的动态性，继承ActiveRecord时，数据库中的表将被映射为一个Ruby类，你不用操心字段值的类型。在Java及其上的框架中则作不到。<br /><br />B).假设有一个Java EE 项目，几个人分别在PowerDesigner里定义了几百甚至上千张表，连接上数据库，PowerDesigner 帮你自动在库中生成了这些表；在Hibernate 里SessionFactory创建JDBC连接， MyEclipse 为你自动生成了每张表相应的JavaBean。你现在要将表中的内容显示在前端网页表格中，不是很难，可问题是，每个表有几个字段，十几个字段，甚至更多，你显示的时候不仅要考虑到getXXX（），还要顾及到返回类型，有些字段又没有定义缺省值，上万个字段实在是无休止的折磨。假设出现在生活中，你只能无奈地写一个Java类，定义成静态方法，是为了直接调用。都是类型惹得祸。<br /><pre name="code" class="java">
//package com.lilytech.hr.rsgl;
/*
 * Created on 2006-4-21
 *
 */

/**
 * @author Kaichuan Zhang
 *
 */
public class Wrap {
	public static String tostring(Object obj){
		try{
			return (obj!=null)?obj.toString():"";
		}catch(Exception err){
			return "";
		}	
	}
	
	public static String tostring(long obj){		
		try{
			return (new Long(obj)).toString();
		}catch(Exception err){
			return "";
		}	
	}
	
	public static String tostring(double obj){		
		try{
			return (new Double(obj)).toString();
		}catch(Exception err){
			return "";
		}	
	}
	
	public static String tostring(boolean obj){			
		try{
			return (new Boolean(obj)).toString();
		}catch(Exception err){
			return "";
		}	
	}
}
</pre><br />一门语言的变量有无类型，对于其上的框架之影响，如你在A). 与B).比较中所见。<br /><br />结语：像Java，C++这样的静态语言需要变量有类型。而对于Ruby这样的动态语言，变量未必需要有类型。
          <br/>
          <span style="color:red;">
            <a href="http://kaichuan-zhang.javaeye.com/blog/56665#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 01 Mar 2007 07:05:38 +0800</pubDate>
        <link>http://kaichuan-zhang.javaeye.com/blog/56665</link>
        <guid>http://kaichuan-zhang.javaeye.com/blog/56665</guid>
      </item>
      <item>
        <title>变量一定要有类型吗（一）</title>
        <author>凌川__</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kaichuan-zhang.javaeye.com">凌川__</a>&nbsp;
          链接：<a href="http://kaichuan-zhang.javaeye.com/blog/56664" style="color:red;">http://kaichuan-zhang.javaeye.com/blog/56664</a>&nbsp;
          发表时间: 2007年03月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          先讨论一下Ruby是不是强类型。<br /><br /><br />1）.在《Beyond Java》<span style="font-size: 7pt">September 2005</span> 一书  6.1.2节Typing  中，Bruce Tate举例<br />     irb(main):015:0> "fish"+4<br />    TypeError: cannot convert Fixnum into String<br />            from (irb):15:in‘+’<br />              from (irb):15<br />从而得出结论：<br /><div class="quote_title">引用</div><div class="quote_div"> That means Ruby is strongly typed.</div><br /><br />我们知道，Ruby是动态语言，在运行中边解释、边检测、边执行，检测类型匹配吗？不是检测类型匹配，而是检测语法。<br />String类的‘+’是一个方法，但是，Ruby从来不拒绝你重写方法。<br /><pre name="code" class="ruby">
class String
  alias : old_plus :+
  def +(other)
    self.old_plus(other.to_s)    
  end  
end

puts "fish"+4       # => fish4
puts '1 ' + 2.3      # => 1 2.3
</pre> <br /><br /><br />2）.Bruce Tate 在“跨越边界: Java 模型以外的类型策略”<span style="font-size: 7pt">2006 年 6 月</span> 一文中写到：<br /><div class="quote_title">引用</div><div class="quote_div">...这两种语言都 <u>倾向于</u> 强类型...</div><br /><br />这两种语言是指Java和 Ruby，他给出了一行Ruby代码来说明；<br /><br />1 + "hello"<br />会收到以下错误消息：<br />TypeError: String can't be coerced into Fixnum<br />        from (irb):3:in '+'<br />        from (irb):3<br /><br /><br />字面值1是Fixnum类的实例对象，让我们重写Fixnum类的‘+’方法，使得‘+’的语法不再出错；<br /><br /><pre name="code" class="ruby">
class Fixnum
  alias : old_plus :+
  def +(other)
    (other.class.eql?String) ? (self.to_s &lt;&lt; other) : (old_plus(other))    
  end  
end

puts  1 + "hello"  # => 1hello
puts  1 + " 2.3"   # => 1 2.3
</pre><br /><br /><br /><br />3）. Ruby是简单的，我们可以只管按照别人说的去使用；Ruby也是灵活而复杂的，我们可以按照自己的需求去使用；<br /><pre name="code" class="ruby">
require "another_plus3"

puts  'he'+1        # => he1
puts '1.5'+2        # => 3.5
puts 1+" he"        # => 1 he

puts 1 + " 2.3"    # => 3.3
puts 1 + 2.3      # => 3.3

puts 1.6 * "2.7"   # => 4.32
puts 1 -"2.3"    # => -1.3
</pre><br />类型错误根本不存在，如果语法错误算是强类型，我无言。Bruce Tate是大牛，他断言Ruby是强类型，国内的牛们也跟着如是说。<br />在1）.中, Bruce Tate断言Ruby是强类型；<br />在2）.中, Bruce Tate认为Ruby 倾向于 强类型。<br /><br />后文“变量一定要有类型吗（二）”将更进一步说明。<br /><br /><br /><pre name="code" class="ruby">
#another_plus3.rb

class String

  alias : old_plus :+
  def +(other)    
    (Float(self)) + (Float(other))  rescue  (self.to_s).old_plus(other.to_s)     
  end  
  
  def coerce(other)
    case other
      when Integer : return other, Integer(self)  rescue  return Float(other), Float(self)
      when Float : return other, Float(self)
      else super
    end
  end
  
end

class Fixnum
  alias : old_plus :+
  def +(other)
    (other.class.eql?String)?(old_plus(Float(other)) rescue self.to_s&lt;&lt;other):(old_plus(other))      
  end  
end

class Float
  alias : old_plus :+
  def +(other)
    (other.class.eql?String)?(old_plus(Float(other)) rescue self.to_s&lt;&lt;other):(old_plus(other))    
  end  
end
</pre><br /><br />========<br />题外话<br /><br />假设若干年后，有一篇搜索引擎报告指出：<br />A)21世纪初期，网络信息以中文和英文居多；<br />B)其中中文信息多数是英文信息的跟风之作，<br />从发布时间得出，英文信息居前；<br />从信息不确切度得出，中文信息没有经过中文世界的思维、理解与吸收，英文信息如何错误，中文信息也有相似度极高的错误...<br />...<br /><br />我衷心地希望与你，一起唱和出中文技术论坛自身的弦音。
          <br/>
          <span style="color:red;">
            <a href="http://kaichuan-zhang.javaeye.com/blog/56664#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 01 Mar 2007 06:30:00 +0800</pubDate>
        <link>http://kaichuan-zhang.javaeye.com/blog/56664</link>
        <guid>http://kaichuan-zhang.javaeye.com/blog/56664</guid>
      </item>
      <item>
        <title>8.4  迭代器、代码块、闭包</title>
        <author>凌川__</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kaichuan-zhang.javaeye.com">凌川__</a>&nbsp;
          链接：<a href="http://kaichuan-zhang.javaeye.com/blog/54178" style="color:red;">http://kaichuan-zhang.javaeye.com/blog/54178</a>&nbsp;
          发表时间: 2007年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Arial">先看一句代码：</font></p>
<p><strong>ruby 代码</strong>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span>(1..9).</span><span class="keyword">each</span><span>&nbsp;{</span><span class="variable">|i</span><span>|&nbsp;print&nbsp;&nbsp;i&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;&nbsp;i&lt;7}&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;123456</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p><font size="2">迭代器each 是数组类的一个方法；大括号{&nbsp; }里的代码是代码块，简称块。你可以用大括号{&nbsp; }将代码组织成块，也可以用 do&hellip;end将代码组织成块。大括号{&nbsp; }的优先级高于do&hellip;end。</font></p>
<p><font size="2"><br />
我们来写一个最简单的块；</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.4-1.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">def</span><span>&nbsp;one_block &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">yield</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">yield</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">yield</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>one_block&nbsp;{&nbsp;puts&nbsp;</span><span class="string">&quot;This&nbsp;is&nbsp;a&nbsp;block.&nbsp;&quot;</span><span>&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><font size="2" face="Arial">运行结果：<br />
This is a block. <br />
This is a block. <br />
This is a block.</font><br />
</p>
<font size="2" face="Arial">
<p><br />
从程序 E8.4-1.rb 可以看到调用一个块要用关键字yield。每一次 yield，块就被调用一次。yield 还可以带参数调用块，看程序 E8.4-2.rb ：</p>
<p>&nbsp;<strong>ruby 代码</strong></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.4-2.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">def</span><span>&nbsp;&nbsp;one_block &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;num&nbsp;</span><span class="keyword">in</span><span>&nbsp;1..3 &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">yield</span><span>(num) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>one_block&nbsp;&nbsp;</span><span class="keyword">do</span><span>&nbsp;</span><span class="variable">|i</span><span>| &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;puts&nbsp;</span><span class="string">&quot;This&nbsp;is&nbsp;&nbsp;block&nbsp;#{i}.&nbsp;&quot;</span><span>&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><font size="2" face="Arial">运行结果：<br />
This is&nbsp; block 1. <br />
This is&nbsp; block 2. <br />
This is&nbsp; block 3.</font><br />
</p>
<font size="2" face="Arial">
<p><br />
一个块可以接收yield 传来的参数，还可以将结果返回给调用它的方法。到目前为止，实在看不出使用代码块的优势，可以把块里的代码直接写在方法中。如果我们还没有决定块里写什么代码，又或者块里的代码会随着不同的情形而变化，那么就看出代码块的灵活性了。</p>
<p>&nbsp;<strong>ruby 代码</strong></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.4-3.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">def</span><span>&nbsp;do_something &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">yield</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>do_something&nbsp;</span><span class="keyword">do</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;(1..9).</span><span class="keyword">each</span><span>&nbsp;{</span><span class="variable">|i</span><span>|&nbsp;print&nbsp;&nbsp;i&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;&nbsp;i&lt;5} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;puts &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>do_something&nbsp;</span><span class="keyword">do</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;3.times&nbsp;{&nbsp;print&nbsp;&nbsp;</span><span class="string">&quot;Hi!&quot;</span><span>&nbsp;}&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;puts &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><font size="2" face="Arial">运行结果：<br />
&gt;ruby E8.4-3.rb<br />
1234<br />
Hi!Hi!Hi!<br />
&gt;Exit code: 0</font><br />
</p>
<font size="2" face="Arial">
<p><br />
两次使用方法do_something，第一次do_something遇到yield，调用了代码块{ 输出1..9中小于5的数 } ；在程序的另一处do_something的时候，我们希望做一些不同的事，所以我们写了一个不同于前一次的代码块{ 输出3次&ldquo;Hi!&rdquo;}。</p>
<p>这是一个简单的例子，但是你能发现其中的技巧：先写出方法的大致框架，调用方法的时候才告诉方法要作什么。<br />
虽然与代码块有关联的方法不都是迭代器，但是，迭代器确实是一个与代码块有关联的方法。让我们为数组类增加一个迭代器 one_by_one；</p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.4-6.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">class</span><span>&nbsp;</span><span class="builtin">Array</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">def</span><span>&nbsp;&nbsp;one_by_one&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;i&nbsp;</span><span class="keyword">in</span><span>&nbsp;0...size&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">yield</span><span>(</span><span class="keyword">self</span><span>[i]&nbsp;)&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">end</span><span>&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">end</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>arr&nbsp;=&nbsp;[1,3,5,7,9] &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>arr.one_by_one&nbsp;{</span><span class="variable">|k</span><span>|&nbsp;print&nbsp;&nbsp;k&nbsp;,&nbsp;&nbsp;</span><span class="string">&quot;,&nbsp;&quot;</span><span>}&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;1,&nbsp;3,&nbsp;5,&nbsp;7,&nbsp;9, </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>arr.one_by_one&nbsp;{</span><span class="variable">|h</span><span>|&nbsp;print&nbsp;h*h,&nbsp;&nbsp;</span><span class="string">&quot;,&nbsp;&quot;</span><span>}&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;1,&nbsp;9,&nbsp;25,&nbsp;49,&nbsp;81,</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<font size="2" face="Arial">
<p>&nbsp;</p>
<p><font size="2" face="Arial">代码块是一段代码，相当于一个匿名方法，被调用它的方法所调用。如果我们不仅仅想调用代码块，还想把代码块作为参数传递给其它方法，就要使用闭包了。闭包也是一段代码，一个代码块，而且能够共享其它方法的局部变量。<br />
闭包既然是一段代码，也就有自己的状态，属性，作用范围，也就是一个可以通过变量引用的对象，我们称之为过程对象。一个过程对象用Proc.new创建，用call方法来调用。</font></p>
<p>先看一个闭包作为参数传递给其它方法的例子；</p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.4-4.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">def</span><span>&nbsp;method(pr)&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;puts&nbsp;pr.call(7)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>oneProc=</span><span class="builtin">Proc</span><span>.</span><span class="keyword">new</span><span>{</span><span class="variable">|k</span><span>|&nbsp;&nbsp;k&nbsp;*=3&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>method(oneProc)&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><br />
<font size="2" face="Arial">运行结果：<br />
&gt;ruby E8.4-4.rb<br />
21<br />
&gt;Exit code: 0</font><br />
</p>
<p><font size="2" face="Arial"><br />
再看一个闭包共享其它方法局部变量的例子；</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.4-5.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">def</span><span>&nbsp;method(n) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;&nbsp;</span><span class="builtin">Proc</span><span>.</span><span class="keyword">new</span><span>{</span><span class="variable">|i</span><span>|&nbsp;&nbsp;n&nbsp;+=i&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>oneProc=method(3) &nbsp;&nbsp;</span> </li>
    <li class=""><span>puts&nbsp;oneProc.call(9)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;12 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;oneProc.call(5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;17</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><font size="2" face="Arial">方法method 返回一个Proc对象，这个对象引用了这个函数的参数：n 。即使 n这个参数在闭包被调用时已经不在自己的作用域里了，这个闭包还是可以访问 n这个参数，并且和方法method 共同拥有变量 n 。开始的时候，方法method 的变量 n是3；oneProc.call(9)的时候，oneProc更新了变量 n，把n=12传回给方法method；oneProc.call(5)的时候，oneProc取出方法method的变量 n=12，更新为n=17，传回给方法method的同时，也把n=17作为自己的返回值输出。</font></p>
<p><br />
</p>
<p><font size="2" face="Arial"></font></p>
<font size="2" face="Arial">
<p><font size="2" face="Arial">完整阅读，请看我写的 <font color="#0000ff"><a href="http://www.javaeye.com/topic/47611">Ruby语言中文教程all in one</a>&nbsp;&nbsp;&nbsp;</font>&nbsp;</font><font face="Arial"><br />
</font><font size="2">&nbsp;</font><br />
</p>
</font></font></font></font></font>
          <br/>
          <span style="color:red;">
            <a href="http://kaichuan-zhang.javaeye.com/blog/54178#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 Feb 2007 06:25:50 +0800</pubDate>
        <link>http://kaichuan-zhang.javaeye.com/blog/54178</link>
        <guid>http://kaichuan-zhang.javaeye.com/blog/54178</guid>
      </item>
      <item>
        <title>8.3  正则表达式</title>
        <author>凌川__</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kaichuan-zhang.javaeye.com">凌川__</a>&nbsp;
          链接：<a href="http://kaichuan-zhang.javaeye.com/blog/54177" style="color:red;">http://kaichuan-zhang.javaeye.com/blog/54177</a>&nbsp;
          发表时间: 2007年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Arial">一本入门小书，不想涉及正则表达式，但是正则表达式与Ruby语言联系如此紧密，总让人感觉绕不开它。所以匆匆结束字符串的介绍，边学边说正则表达式。<br />
正则表达式之强大、复杂，由来已久。自从1956年提出了&ldquo;正则集代数&rdquo;，正则表达式就逐渐被广泛地应用于操作系统，编程语言，算法设计，人工智能&hellip;&hellip;<br />
现在，除了Perl这样支持强大正则表达式功能的语言之外，Java，JavaScript， C# 等语言都纷纷支持正则表达式，只不过支持的程度不同。而Ruby正是一种强烈而灵活地支持正则表达式的语言。<br />
下面，我努力尝试尽可能简单地描述Ruby中的正则表达式。<br />
正则表达式(regular expression)描述了一种字符串匹配的模式，可以用来检查一个串是否含有某种子串；将匹配的子串做替换；或者从某个串中取出符合某个条件的子串；等等。<br />
Ruby中，可以使用构造器显式地创建一个正则表达式，也可以使用字面值形式 /正则模式/ 来创建一个正则表达式。</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.3-1.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>str=</span><span class="string">&quot;Hello,kaichuan,Welcome!&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;&nbsp;str&nbsp;=~&nbsp;&nbsp;/kaichuan/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>puts&nbsp;&nbsp;str&nbsp;=~&nbsp;&nbsp;/a/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;7&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;&nbsp;str&nbsp;=~&nbsp;&nbsp;/ABC/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;nil&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><br />
</p>
<p><font size="2" face="Arial"><br />
我在字符串str中找我的名字 kaichuan。找到了，在字符串str的第6个字符处。和数组一样，字符串的起始索引位置是0。<br />
在字符串str中找小写字母a，也找到了，第一个小写字母a在字符串str的第7个字符处；在字符串str中找大写字母ABC，没有找到。<br />
匹配一个正则表达式，用&ldquo;=~&rdquo; ，不能用&ldquo;==&rdquo;。 &ldquo;=~&rdquo;用来比较是否符合一个正则表达式,返回模式在字符串中被匹配到的位置，否则返回nil。<br />
不匹配一个正则表达式，用&ldquo;！~&rdquo; ，不能用&ldquo;！=&rdquo;。 &ldquo;！~&rdquo;用来断言不符合一个正则表达式,返回 true,flase。</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.3-2.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>str=</span><span class="string">&quot;Hello,kaichuan,Welcome!&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;&nbsp;str&nbsp;!~&nbsp;/kaichuan/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>puts&nbsp;&nbsp;str&nbsp;!~&nbsp;/a/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;&nbsp;str&nbsp;!~&nbsp;/ABC/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;true</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><br />
</p>
<font size="2" face="Arial">
<p><br />
假设现在有一篇很短的文章如下：<br />
This is windows2000 or windows98 system.<br />
Windows system is BEST?<br />
Windows2000 running in 12-31-2006,&hellip;&hellip;<br />
我们需要将文章中所有的windows2000 或者 windows98 换成 Windows XP,不论单词开头大小写，但是不带数字的windows不换；并且要把2006年12月31日改成当前时间，如何使用正则表达式来替换呢？<br />
给出例程 E8.3-3.rb 之前，先学习一些烦琐的东西。</p>
<p>&nbsp;</p>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="COLOR: black">一些字符或字符组合在</span><span style="COLOR: black; LINE-HEIGHT: 150%">正则表达式</span><span style="COLOR: black">中有特殊的意义，分别如下：</span></div>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">特别字符</span></div>
<p>
<table cellspacing="0" border="1" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 21pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">特别字符</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">描述</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">( )</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符，请使用</span><span style="FONT-SIZE: 9pt"> \( </span><span style="FONT-SIZE: 9pt">和</span><span style="FONT-SIZE: 9pt"> \)</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">[]&nbsp;</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">范围描述符</span><span style="FONT-SIZE: 9pt; COLOR: black">&nbsp;(</span><span style="FONT-SIZE: 9pt; COLOR: black">比如</span><span style="FONT-SIZE: 9pt; COLOR: black">,[a&nbsp;-&nbsp;z]&nbsp;</span><span style="FONT-SIZE: 9pt; COLOR: black">表示在</span><span style="FONT-SIZE: 9pt; COLOR: black">a&nbsp;</span><span style="FONT-SIZE: 9pt; COLOR: black">到</span><span style="FONT-SIZE: 9pt; COLOR: black">&nbsp;z&nbsp;</span><span style="FONT-SIZE: 9pt; COLOR: black">范围内的一个字母</span><span style="FONT-SIZE: 9pt; COLOR: black">)</span><span style="FONT-SIZE: 9pt; COLOR: black">，</span><span style="FONT-SIZE: 9pt">要匹配</span><span style="FONT-SIZE: 9pt"> [</span><span style="FONT-SIZE: 9pt">，请使用</span><span style="FONT-SIZE: 9pt"> \[</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">{}</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">标记限定符表达式。要匹配</span><span style="FONT-SIZE: 9pt"> {</span><span style="FONT-SIZE: 9pt">，请使用</span><span style="FONT-SIZE: 9pt"> \{</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">\</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">例如，</span><span style="FONT-SIZE: 9pt"> 'n' </span><span style="FONT-SIZE: 9pt">匹配字符</span><span style="FONT-SIZE: 9pt"> 'n'</span><span style="FONT-SIZE: 9pt">。</span><span style="FONT-SIZE: 9pt">'\n' </span><span style="FONT-SIZE: 9pt">匹配换行符。序列</span><span style="FONT-SIZE: 9pt"> '\\' </span><span style="FONT-SIZE: 9pt">匹配</span><span style="FONT-SIZE: 9pt"> &quot;\&quot;</span><span style="FONT-SIZE: 9pt">，而</span><span style="FONT-SIZE: 9pt"> '\(' </span><span style="FONT-SIZE: 9pt">则匹配</span><span style="FONT-SIZE: 9pt"> &quot;(&quot;</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">|</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">指明两项之间的一个选择。要匹配</span><span style="FONT-SIZE: 9pt"> |</span><span style="FONT-SIZE: 9pt">，请使用</span><span style="FONT-SIZE: 9pt"> \|</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">.</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配除换行符</span><span style="FONT-SIZE: 9pt"> \n</span><span style="FONT-SIZE: 9pt">之外的任何单字符。要匹配</span><span style="FONT-SIZE: 9pt"> .</span><span style="FONT-SIZE: 9pt">，请使用</span><span style="FONT-SIZE: 9pt"> \</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">&nbsp;</div>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">非打印字符</span></div>
<p>
<table cellspacing="0" border="1" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">非打印字符</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">描述</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">\f</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配一个换页符。等价于</span><span style="FONT-SIZE: 9pt"> \x0c</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">\n</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配一个换行符。等价于</span><span style="FONT-SIZE: 9pt"> \x0a</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">\r</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配一个回车符。等价于</span><span style="FONT-SIZE: 9pt"> \x0d</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">\s</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配任何空白字符，包括空格、制表符、换页符等等。等价于</span><span style="FONT-SIZE: 9pt"> [ \f\n\r\t\v]</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">\S</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配任何非空白字符。等价于</span><span style="FONT-SIZE: 9pt"> [^ \f\n\r\t\v]</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">\t</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 10pt 0pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配一个制表符。等价于</span><span style="FONT-SIZE: 9pt"> \x09</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">\w</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配包括下划线的任何单词字符。等价于</span><span style="FONT-SIZE: 9pt">'[A-Za-z0-9_]'</span><span style="FONT-SIZE: 9pt; COLOR: black">字母或数字</span><span style="FONT-SIZE: 9pt; COLOR: black">;</span><span style="FONT-SIZE: 9pt; COLOR: black">相当于</span><span style="FONT-SIZE: 9pt; COLOR: black">&nbsp;[0-9A-Za-z]</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">\W</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配任何非单词字符。等价于</span><span style="FONT-SIZE: 9pt"> '[^A-Za-z0-9_]'</span><span style="FONT-SIZE: 9pt; COLOR: black">非字母</span><span style="FONT-SIZE: 9pt; COLOR: black">,</span><span style="FONT-SIZE: 9pt; COLOR: black">数字</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">\d</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配一个数字字符。等价于</span><span style="FONT-SIZE: 9pt"> [0-9]</span><span style="FONT-SIZE: 9pt">。</span><span style="FONT-SIZE: 9pt; COLOR: black">&nbsp;[0-9]</span><span style="FONT-SIZE: 9pt; COLOR: black">数字</span><span style="FONT-SIZE: 9pt; COLOR: black">;</span><span style="FONT-SIZE: 9pt; COLOR: black">相当于</span><span style="FONT-SIZE: 9pt; COLOR: black">&nbsp;[0-9]</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">\D</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">匹配一个非数字字符。等价于</span><span style="FONT-SIZE: 9pt"> [^0-9]</span><span style="FONT-SIZE: 9pt">。<span style="COLOR: black">非数字字符</span></span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="108" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 81pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">\b</span></div>
            </td>
            <td nowrap="nowrap" width="446" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 334.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">退格符</span><span style="FONT-SIZE: 9pt; COLOR: black">&nbsp;(0x08)&nbsp;(</span><span style="FONT-SIZE: 9pt; COLOR: black">仅在范围描述符内部时</span><span style="FONT-SIZE: 9pt; COLOR: black">)</span></div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">&nbsp;</div>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="COLOR: black; LINE-HEIGHT: 150%">限定符</span></div>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。</span><span style="LINE-HEIGHT: 150%"><br />
</span><span style="LINE-HEIGHT: 150%">　　</span><span style="LINE-HEIGHT: 150%">* </span><span style="LINE-HEIGHT: 150%">和</span><span style="LINE-HEIGHT: 150%"> + </span><span style="LINE-HEIGHT: 150%">限定符都是贪婪的，因为它们会尽可能多的匹配文字，只有在它们的后面加上一个</span><span style="LINE-HEIGHT: 150%"> ? </span><span style="LINE-HEIGHT: 150%">就可以实现非贪婪或最小匹配。</span></div>
<p>
<table cellspacing="0" border="1" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 21pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">限定</span><span style="FONT-SIZE: 9pt">符</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">描述</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">*</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">前面元素出现</span><span style="FONT-SIZE: 9pt; COLOR: black">0</span><span style="FONT-SIZE: 9pt; COLOR: black">或多次</span><span style="FONT-SIZE: 9pt">。</span><span style="FONT-SIZE: 9pt">* </span><span style="FONT-SIZE: 9pt">等价于</span><span style="FONT-SIZE: 9pt">{0,}</span><span style="FONT-SIZE: 9pt">。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">例如，</span><span style="FONT-SIZE: 9pt">zo* </span><span style="FONT-SIZE: 9pt">能匹配</span><span style="FONT-SIZE: 9pt"> &quot;z&quot; </span><span style="FONT-SIZE: 9pt">以及</span><span style="FONT-SIZE: 9pt"> &quot;zoo&quot;</span><span style="FONT-SIZE: 9pt">。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">。要匹配</span><span style="FONT-SIZE: 9pt"> * </span><span style="FONT-SIZE: 9pt">字符，请使用</span><span style="FONT-SIZE: 9pt"> \*</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">+</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">前面元素出现</span><span style="FONT-SIZE: 9pt; COLOR: black">1</span><span style="FONT-SIZE: 9pt; COLOR: black">或多次</span><span style="FONT-SIZE: 9pt">。</span><span style="FONT-SIZE: 9pt">+ </span><span style="FONT-SIZE: 9pt">等价于</span><span style="FONT-SIZE: 9pt"> {1,}</span><span style="FONT-SIZE: 9pt">。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">例如，</span><span style="FONT-SIZE: 9pt">'zo+' </span><span style="FONT-SIZE: 9pt">能匹配</span><span style="FONT-SIZE: 9pt"> &quot;zo&quot; </span><span style="FONT-SIZE: 9pt">以及</span><span style="FONT-SIZE: 9pt"> &quot;zoo&quot;</span><span style="FONT-SIZE: 9pt">，但不能匹配</span><span style="FONT-SIZE: 9pt"> &quot;z&quot;</span><span style="FONT-SIZE: 9pt">。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">要匹配</span><span style="FONT-SIZE: 9pt"> + </span><span style="FONT-SIZE: 9pt">字符，请使用</span><span style="FONT-SIZE: 9pt"> \+</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">?</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt; COLOR: black">前面元素最多出现</span><span style="FONT-SIZE: 9pt; COLOR: black">1</span><span style="FONT-SIZE: 9pt; COLOR: black">次</span><span style="FONT-SIZE: 9pt; COLOR: black">;</span><span style="FONT-SIZE: 9pt; COLOR: black">相当于</span><span style="FONT-SIZE: 9pt; COLOR: black">&nbsp;{0,1}</span><span style="FONT-SIZE: 9pt">。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">例如，</span><span style="FONT-SIZE: 9pt">&rdquo;do(es)?&rdquo; </span><span style="FONT-SIZE: 9pt">可以匹配</span><span style="FONT-SIZE: 9pt"> &ldquo;do&rdquo; </span><span style="FONT-SIZE: 9pt">或</span><span style="FONT-SIZE: 9pt"> &ldquo;does&rdquo; </span><span style="FONT-SIZE: 9pt">中的</span><span style="FONT-SIZE: 9pt">&quot;do&quot; </span><span style="FONT-SIZE: 9pt">。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">要匹配</span><span style="FONT-SIZE: 9pt"> ? </span><span style="FONT-SIZE: 9pt">字符，请使用</span><span style="FONT-SIZE: 9pt"> \?</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">{n}</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">n </span><span style="FONT-SIZE: 9pt">是一个非负整数。匹配确定的</span><span style="FONT-SIZE: 9pt"> n </span><span style="FONT-SIZE: 9pt">次。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">例如，</span><span style="FONT-SIZE: 9pt">'o{2}' </span><span style="FONT-SIZE: 9pt">不能匹配</span><span style="FONT-SIZE: 9pt"> &quot;Bob&quot; </span><span style="FONT-SIZE: 9pt">中的</span><span style="FONT-SIZE: 9pt"> 'o'</span><span style="FONT-SIZE: 9pt">，但是能匹配</span><span style="FONT-SIZE: 9pt"> &quot;food&quot; </span><span style="FONT-SIZE: 9pt">中的两个</span><span style="FONT-SIZE: 9pt"> o</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">{n,}</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">n </span><span style="FONT-SIZE: 9pt">是一个非负整数。至少匹配</span><span style="FONT-SIZE: 9pt">n </span><span style="FONT-SIZE: 9pt">次。</span><span style="FONT-SIZE: 9pt">'o{1,}' </span><span style="FONT-SIZE: 9pt">等价于</span><span style="FONT-SIZE: 9pt"> 'o+'</span><span style="FONT-SIZE: 9pt">。</span><span style="FONT-SIZE: 9pt">'o{0,}' </span><span style="FONT-SIZE: 9pt">则等价于</span><span style="FONT-SIZE: 9pt"> 'o*'</span><span style="FONT-SIZE: 9pt">。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">例如，</span><span style="FONT-SIZE: 9pt">'o{2,}' </span><span style="FONT-SIZE: 9pt">不能匹配</span><span style="FONT-SIZE: 9pt"> &quot;Bob&quot; </span><span style="FONT-SIZE: 9pt">中的</span><span style="FONT-SIZE: 9pt"> 'o'</span><span style="FONT-SIZE: 9pt">，但能匹配</span><span style="FONT-SIZE: 9pt"> &quot;foooood&quot; </span><span style="FONT-SIZE: 9pt">中的所有</span><span style="FONT-SIZE: 9pt"> o</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="111" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 83.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">{n,m}</span></div>
            </td>
            <td nowrap="nowrap" width="429" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 322pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">m </span><span style="FONT-SIZE: 9pt">和</span><span style="FONT-SIZE: 9pt"> n </span><span style="FONT-SIZE: 9pt">均为非负整数，其中</span><span style="FONT-SIZE: 9pt">n &lt;= m</span><span style="FONT-SIZE: 9pt">。<span style="COLOR: black">前面元素最少出现</span></span><span style="FONT-SIZE: 9pt; COLOR: black">n</span><span style="FONT-SIZE: 9pt; COLOR: black">次</span><span style="FONT-SIZE: 9pt; COLOR: black">,</span><span style="FONT-SIZE: 9pt; COLOR: black">最多出现</span><span style="FONT-SIZE: 9pt; COLOR: black">m</span><span style="FONT-SIZE: 9pt; COLOR: black">次</span><span style="FONT-SIZE: 9pt">。</span><span style="FONT-SIZE: 9pt">'o{0,1}' </span><span style="FONT-SIZE: 9pt">等价于</span><span style="FONT-SIZE: 9pt"> 'o?'</span><span style="FONT-SIZE: 9pt">。请注意在逗号和两个数之间不能有空格。</span></div>
            <div style="MARGIN: 0cm 21pt 0pt 10pt; TEXT-INDENT: 10pt; LINE-HEIGHT: 12pt"><span style="FONT-SIZE: 9pt">例如，</span><span style="FONT-SIZE: 9pt">&quot;o{1,3}&quot; </span><span style="FONT-SIZE: 9pt">将匹配</span><span style="FONT-SIZE: 9pt"> &quot;fooooood&quot; </span><span style="FONT-SIZE: 9pt">中的前三个</span><span style="FONT-SIZE: 9pt"> o</span><span style="FONT-SIZE: 9pt">。</span></div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><strong><span style="FONT-WEIGHT: normal; LINE-HEIGHT: 150%">定位符</span></strong><strong><span style="LINE-HEIGHT: 150%"><br />
</span></strong><span style="LINE-HEIGHT: 150%"><br />
</span><span style="LINE-HEIGHT: 150%">　　用来描述字符串或单词的边界，</span><span style="LINE-HEIGHT: 150%"> ^ </span><span style="LINE-HEIGHT: 150%">和</span><span style="LINE-HEIGHT: 150%"> $ </span><span style="LINE-HEIGHT: 150%">分别指字符串的开始与结束，</span><span style="LINE-HEIGHT: 150%">\b</span><span style="LINE-HEIGHT: 150%">描述单词的前或后边界，</span><span style="LINE-HEIGHT: 150%">\B</span><span style="LINE-HEIGHT: 150%">表示非单词边界。<span style="COLOR: black">不能对定位符使用限定符。</span></span></div>
<p>
<table cellspacing="0" border="1" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="103" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><strong><span style="FONT-WEIGHT: normal; FONT-SIZE: 9pt; LINE-HEIGHT: 150%">定位符</span></strong></div>
            </td>
            <td nowrap="nowrap" width="465" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 349pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">描述</span><span style="FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 150%">&nbsp;&nbsp;</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="103" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">^</span></div>
            </td>
            <td nowrap="nowrap" width="465" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 349pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">匹配输入字符串的开始位置，除非在方括号表达式中使用，此时它表示不接受该字符集合。要匹配</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> ^ </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">字符本身，请使用</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> \^</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="103" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">$</span></div>
            </td>
            <td nowrap="nowrap" width="465" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 349pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">匹配输入字符串的结尾位置。如果设置了</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> RegExp </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">对象的</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> Multiline </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">属性，则</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> $ </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">也匹配</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> '\n' </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">或</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> '\r'</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">。要匹配</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> $ </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">字符本身，请使用</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> \$</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="103" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 150%">\b</span></div>
            </td>
            <td nowrap="nowrap" width="465" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 349pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">匹配一个单词边界，也就是指单词和空格间的位置。例如，</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> 'er\b' </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">可以匹配</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">&quot;never&quot; </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">中的</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> 'er'</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">，但不能匹配</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> &quot;verb&quot; </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">中的</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> 'er'</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">。</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="103" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 150%">\B</span></div>
            </td>
            <td nowrap="nowrap" width="465" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 349pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 21pt 0pt 0cm; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 150%">&nbsp;&nbsp;</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">匹配非单词边界。</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">'er\B' </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">能匹配</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> &quot;verb&quot; </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">中的</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> 'er'</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">，但不能匹配</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> &quot;never&quot; </span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">中的</span><span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%"> 'er'</span></div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">&nbsp;</div>
<div style="BACKGROUND: white; MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">各种操作符的运算优先级</span><strong><span style="LINE-HEIGHT: 150%"><br />
<br />
</span></strong><span style="LINE-HEIGHT: 150%">　　相同优先级的从左到右进行运算，不同优先级的运算先高后低。各种操作符的优先级从高到低如下：</span></div>
<p>
<table cellspacing="0" border="1" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="112" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 84.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">优先级</span></div>
            </td>
            <td nowrap="nowrap" width="233" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 175pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">操作符</span></div>
            </td>
            <td nowrap="nowrap" width="208" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: green 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #ccffcc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 155.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">描述</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="112" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 84.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">高</span></div>
            </td>
            <td nowrap="nowrap" width="233" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 175pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">\</span></div>
            </td>
            <td nowrap="nowrap" width="208" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 155.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">转义符</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="112" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 84.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt">&nbsp;</div>
            </td>
            <td nowrap="nowrap" width="233" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 175pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">(),&nbsp;[]</span></div>
            </td>
            <td nowrap="nowrap" width="208" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 155.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">圆括号和方括号</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="112" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 84.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt">&nbsp;</div>
            </td>
            <td nowrap="nowrap" width="233" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 175pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">*, +, ?, {n}, {n,}, {n,m}</span></div>
            </td>
            <td nowrap="nowrap" width="208" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 155.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">限定符</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="112" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 84.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt">&nbsp;</div>
            </td>
            <td nowrap="nowrap" width="233" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 175pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">^, $,</span></div>
            </td>
            <td nowrap="nowrap" width="208" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 155.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">位置和顺序</span></div>
            </td>
        </tr>
        <tr style="page-break-inside: avoid">
            <td nowrap="nowrap" width="112" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 84.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">低</span></div>
            </td>
            <td nowrap="nowrap" width="233" style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 175pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">|</span></div>
            </td>
            <td nowrap="nowrap" width="208" style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 155.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 12pt"><span style="FONT-SIZE: 9pt">&ldquo;</span><span style="FONT-SIZE: 9pt">或</span><span style="FONT-SIZE: 9pt">&rdquo;</span><span style="FONT-SIZE: 9pt">操作</span></div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<div style="MARGIN: 0cm 21pt 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">
<p><font face="Arial">正则表达式强大，但是枯燥。有一个办法，就是等你需要用的时候再来学习。</font></p>
<p><font face="Arial">下面解释例程 E8.3-3.rb，</font><font face="Arial"> </font></p>
<font face="Arial">
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.3-3.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>strdoc=《<doc_eof span=""></doc_eof> <span>DOC_EOF&nbsp;&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>This&nbsp;is&nbsp;windows2000&nbsp;</span><span class="keyword">or</span><span>&nbsp;windows98&nbsp;system. &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>Windows&nbsp;system&nbsp;is&nbsp;BEST? &nbsp;&nbsp;</span> </li>
    <li class=""><span>Windows2000&nbsp;running&nbsp;</span><span class="keyword">in</span><span>&nbsp;12-31-2006,&hellip;&hellip; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>DOC_EOF &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>re&nbsp;=&nbsp;/[w</span><span class="variable">|W</span><span>]indows(?:98</span><span class="variable">|2000</span><span>)&nbsp;/ &nbsp;&nbsp;</span> </li>
    <li class=""><span>strdoc.gsub!(re,&nbsp;</span><span class="string">&quot;Windows&nbsp;XP&nbsp;&quot;</span><span>)&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>re&nbsp;=&nbsp;/[1-9][0-9]\-[1-9][0-9]\-\d\d\d\d/ &nbsp;&nbsp;</span> </li>
    <li class=""><span>time&nbsp;=&nbsp;</span><span class="builtin">Time</span><span>.now.strftime(</span><span class="string">&quot;%m-%d-%Y&quot;</span><span>) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>strdoc.gsub!(re,&nbsp;time)&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>puts&nbsp;strdoc&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>运行结果：<br />
&gt;ruby E8.3-3.rb<br />
This is Windows XP or Windows XP system.<br />
Windows system is BEST?<br />
Windows XP running in 02-06-2007,&hellip;&hellip;<br />
&gt;Exit code: 0</p>
<p><br />
strdoc.gsub!(re, &quot;Windows XP &quot;)，是把字符串strdoc里所有匹配正则模式re的子串替换为 &quot;Windows XP &quot;。 gsub!是替换所有子串。<br />
strdoc.gsub!(re, time)，是把字符串strdoc里所有匹配正则模式re的子串替换为字符串time。<br />
time = Time.now.strftime(&quot;%m-%d-%Y&quot;)，取出系统当前时间，并且格式化成（ 月-日-年 ）的形式，生成一个字符串time。</p>
<p><br />
</p>
<p><font size="2" face="Arial">完整阅读，请看我写的 <font color="#0000ff"><a href="http://www.javaeye.com/topic/47611">Ruby语言中文教程all in one</a>&nbsp;&nbsp; </font>&nbsp;</font><font face="Arial"><br />
</font><font size="2">&nbsp;</font></p>
</font>
<p>&nbsp;</p>
</div>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://kaichuan-zhang.javaeye.com/blog/54177#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 Feb 2007 06:13:53 +0800</pubDate>
        <link>http://kaichuan-zhang.javaeye.com/blog/54177</link>
        <guid>http://kaichuan-zhang.javaeye.com/blog/54177</guid>
      </item>
      <item>
        <title>8.2  再说字符串</title>
        <author>凌川__</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kaichuan-zhang.javaeye.com">凌川__</a>&nbsp;
          链接：<a href="http://kaichuan-zhang.javaeye.com/blog/54176" style="color:red;">http://kaichuan-zhang.javaeye.com/blog/54176</a>&nbsp;
          发表时间: 2007年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Arial">一.&nbsp;生成一个字符串<br />
字符串是String类的对象，一般使用字面值来创建。</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.2-1.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>str1&nbsp;=&nbsp;'this&nbsp;is&nbsp;str1' &nbsp;&nbsp;</span> </li>
    <li class=""><span>str2&nbsp;=&nbsp;</span><span class="string">&quot;this&nbsp;is&nbsp;str2&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>str3&nbsp;=&nbsp;%q/this&nbsp;is&nbsp;str3/ &nbsp;&nbsp;</span> </li>
    <li class=""><span>str4&nbsp;=&nbsp;%Q/this&nbsp;is&nbsp;str4/ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>str5&nbsp;=《EOF_STRING<ok_str span=""></ok_str>&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;Here&nbsp;is&nbsp;string&nbsp;document,&nbsp;str5 &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;one; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;two; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;three. &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;OK &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>EOF_STRING<ok_str span=""></ok_str>&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;str3 &nbsp;&nbsp;</span> </li>
    <li class=""><span>puts&nbsp;str4 &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;str5 &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><br />
</p>
<p><font size="2" face="Arial">运行结果：<br />
&gt;ruby E8.2-1.rb<br />
this is str3<br />
this is str4<br />
&nbsp; Here is string document, str5<br />
&nbsp;&nbsp;&nbsp;&nbsp; line one;<br />
&nbsp;&nbsp;&nbsp;&nbsp; line two;<br />
&nbsp;&nbsp;&nbsp;&nbsp; line three.<br />
&nbsp; OK<br />
&gt;Exit code: 0</font></p>
<p><font size="2" face="Arial"><br />
%q 用来生成单引号字符串；%Q用来生成双引号字符串。%q或者%Q后面跟着的是分隔符，可以是配对的!&nbsp; !； /&nbsp; /； &lt;&nbsp; &gt;； (&nbsp; )； [&nbsp; ] ；{&nbsp; }；等等。<br />
str5是一个字符串文档，从 &lt;&lt;和文档结束符的下一行开始，直到遇到一个放置在行首的文档结束符，结束整个字符串文档。<br />
一个数组可以用join 方法转换成字符串，join( ) 内的参数也是一个字符串，用来分隔数组的每个元素，例如：arr.join(&quot;, &quot;)。</font></p>
<p><font size="2" face="Arial">二.&nbsp;字符串操作<br />
字符串既然是String类的对象，String类的方法你都可以使用在字符串变量上，String类的方法非常多，下面略举几例。</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.2-2.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>str&nbsp;=&nbsp;'&nbsp;this'&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;is&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>str&nbsp;+=&nbsp;</span><span class="string">&quot;&nbsp;you&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>str&nbsp;&lt;&lt;&nbsp;</span><span class="string">&quot;&nbsp;string&quot;</span><span>&nbsp;&lt;&lt;&nbsp;</span><span class="string">&quot;&nbsp;.&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;&nbsp;str*2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;this&nbsp;is&nbsp;you&nbsp;string&nbsp;.&nbsp;this&nbsp;is&nbsp;you&nbsp;string&nbsp;. </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>puts&nbsp;&nbsp;str[-12,12]&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;you&nbsp;string&nbsp;.</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><br />
</p>
<font face="Arial">
<p><br />
<font size="2">三.&nbsp;字符串转义<br />
双引号括起来的字符串会有转义，例如：&ldquo;\n&rdquo; 表示换行。还有一些其它的转义符号，比如制表符之类。</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.2-3.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>str&nbsp;=&nbsp;</span><span class="string">&quot;&nbsp;this&nbsp;is&nbsp;you&nbsp;string&nbsp;.&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>puts&nbsp;&nbsp;str*2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;this&nbsp;is&nbsp;you&nbsp;string&nbsp;.&nbsp;this&nbsp;is&nbsp;you&nbsp;string&nbsp;. </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>str&nbsp;=&nbsp;</span><span class="string">&quot;&nbsp;this&nbsp;is&nbsp;you&nbsp;string&nbsp;.\n&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;&nbsp;str*2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;this&nbsp;is&nbsp;you&nbsp;string&nbsp;. </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;is&nbsp;you&nbsp;string&nbsp;. &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>str&nbsp;=&nbsp;</span><span class="string">&quot;&nbsp;\tthis&nbsp;is&nbsp;you&nbsp;string&nbsp;.&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>puts&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;&nbsp;this&nbsp;is&nbsp;you&nbsp;string&nbsp;. </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>str&nbsp;=&nbsp;'&nbsp;this\'s&nbsp;you&nbsp;string&nbsp;.\n' &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;this's&nbsp;you&nbsp;string&nbsp;.\n</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><br />
</p>
<p><font size="2">单引号括起来的字符串并不会对字符串作任何解释，你看到的是什么便是什么，有一个例外：单引号字符串里的 单引号 需要转义。</font></p>
<p><font size="2">四.&nbsp;字符串内嵌表达式<br />
在双引号扩起来的字符串中，不仅可以使用各种转义符，而且可以放置任意的Ruby表达式在 #{&nbsp;&nbsp; } 之中，这些表达式在使用这个字符串的时候被计算出值，然后放入字符串。</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.2-4.rb </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">def</span><span>&nbsp;hello(name) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;&nbsp;Welcome,&nbsp;#{name}&nbsp;!&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>puts&nbsp;&nbsp;hello(</span><span class="string">&quot;kaichuan&quot;</span><span>)&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;Welcome,&nbsp;kaichuan&nbsp;! </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>puts&nbsp;&nbsp;hello(</span><span class="string">&quot;Ben&quot;</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;Welcome,&nbsp;Ben&nbsp;!</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><br />
</p>
<p><font size="2">字符串内嵌表达式，使得你能够更加灵活地组织代码，表现出更强、更多的动态特性。</font></p>
<p><font size="2"></font></p>
<font size="2">
<p><font size="2" face="Arial">完整阅读，请看我写的 <font color="#0000ff"><a href="http://www.javaeye.com/topic/47611">Ruby语言中文教程all in one</a>&nbsp;&nbsp;&nbsp;</font>&nbsp;</font><font face="Arial"><br />
</font><font size="2">&nbsp;</font><br />
</p>
</font></font>
          <br/>
          <span style="color:red;">
            <a href="http://kaichuan-zhang.javaeye.com/blog/54176#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 Feb 2007 06:07:54 +0800</pubDate>
        <link>http://kaichuan-zhang.javaeye.com/blog/54176</link>
        <guid>http://kaichuan-zhang.javaeye.com/blog/54176</guid>
      </item>
      <item>
        <title>8.1  再说数组</title>
        <author>凌川__</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kaichuan-zhang.javaeye.com">凌川__</a>&nbsp;
          链接：<a href="http://kaichuan-zhang.javaeye.com/blog/54175" style="color:red;">http://kaichuan-zhang.javaeye.com/blog/54175</a>&nbsp;
          发表时间: 2007年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Arial">一. 建立一个数组</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.1-1.rb </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>arr1=[] &nbsp;&nbsp;</span></li>
    <li class=""><span>arr2=</span><span class="builtin">Array</span><span>.</span><span class="keyword">new</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>arr3=['4&nbsp;','5&nbsp;','6&nbsp;'] &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr1,&nbsp;&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;arr2,&nbsp;&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr3,&nbsp;&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
</p>
<p><font size="2" face="Arial">运行结果：<br />
&gt;ruby E8.1-1.rb</font></p>
<font face="Arial">
<p><br />
<font size="2">4 5 6 <br />
&gt;Exit code: 0</font></p>
<p><font size="2">二. 访问数组元素<br />
Ruby以整数作为下标，访问数组元素通过数组下标，数组下标称作数组索引比较好一些。</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.1-2.rb </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>arr=[3,4,5,6,7,8,9] &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>puts&nbsp;arr[0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;3 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>puts&nbsp;arr.first&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;3 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>puts&nbsp;arr[arr.length-1]&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;9 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>puts&nbsp;arr[arr.size-1]&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;9 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>puts&nbsp;arr.last&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;9 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>puts&nbsp;arr[-1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;9 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>puts&nbsp;arr[-2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;8 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;arr[1..3]&nbsp;&nbsp;&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;456 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr[-3,2]&nbsp;&nbsp;&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
</p>
<p><font size="2"><br />
数组的索引从0开始，一直到数组的长度减去1；负数表示从数组末尾开始的索引；用一对数字来索引数组，第一个数字表示开始位置，第二数字表示从开始位置起的元素数目。</font></p>
<p><font size="2">三. 增加、删除数组元素<br />
Ruby的数组大小是动态的，你能够随时增加、删除数组元素。<br />
print arr.join(&quot;, &quot;),&quot;\n&quot; 意思是：将数组arr转换成字符串输出，用&quot;, &quot;隔开每个元素，并且换行。</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.1-3.rb </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>arr=[4,5,6]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;4,&nbsp;5,&nbsp;6 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>arr[4]&nbsp;=&nbsp;</span><span class="string">&quot;m&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#把4号索引位置元素赋值为&quot;m&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;4,&nbsp;5,&nbsp;6,&nbsp;,&nbsp;m </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;arr[3]&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#打印3号索引位置元素&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;=&gt;&nbsp;nil </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>arr.delete_at(3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#删除3号索引位置元素 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;4,&nbsp;5,&nbsp;6,&nbsp;m </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>arr[2]&nbsp;=&nbsp;[</span><span class="string">&quot;a&quot;</span><span>,</span><span class="string">&quot;b&quot;</span><span>,</span><span class="string">&quot;c&quot;</span><span>]&nbsp;&nbsp;</span><span class="comment">#把2号索引位置元素赋值为[&quot;a&quot;,&quot;b&quot;,&quot;c&quot;] </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;4,&nbsp;5,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;m </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr[2]&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#打印2号索引位置元素&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;=&gt;&nbsp;abc </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>arr[0..1]&nbsp;=&nbsp;[7,</span><span class="string">&quot;h&quot;</span><span>,</span><span class="string">&quot;b&quot;</span><span>]&nbsp;&nbsp;</span><span class="comment">#把0..1号元素替换为7,&quot;h&quot;,&quot;b&quot; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;7,&nbsp;h,&nbsp;b,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;m </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>arr.push(</span><span class="string">&quot;b&quot;</span><span>&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#加入元素&quot;b&quot; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;7,&nbsp;h,&nbsp;b,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;m,&nbsp;b </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>arr.delete([</span><span class="string">&quot;a&quot;</span><span>,</span><span class="string">&quot;b&quot;</span><span>,</span><span class="string">&quot;c&quot;</span><span>]&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#删除元素[&quot;a&quot;,&quot;b&quot;,&quot;c&quot;] </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;7,&nbsp;h,&nbsp;b,&nbsp;m,&nbsp;b </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>arr.delete(</span><span class="string">&quot;b&quot;</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#删除所有元素&quot;b&quot; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;7,&nbsp;h,&nbsp;m </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>arr.insert(3,</span><span class="string">&quot;d&quot;</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#在3号索引位置插入元素&quot;d&quot; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;7,&nbsp;h,&nbsp;m,&nbsp;d </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>arr&lt;&lt;</span><span class="string">&quot;f&quot;</span><span>&lt;&lt;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#加入元素&quot;f&quot;；加入元素2 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;7,&nbsp;h,&nbsp;m,&nbsp;d,&nbsp;f,&nbsp;2 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>arr.pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#删除尾元素 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;7,&nbsp;h,&nbsp;m,&nbsp;d,&nbsp;f </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>arr.shift&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#删除首元素&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;h,&nbsp;m,&nbsp;d,&nbsp;f </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>arr.clear&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#清空数组arr </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;arr.join(</span><span class="string">&quot;,&nbsp;&quot;</span><span>),</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
</p>
<p><font size="2">四. 数组运算</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E8.1-4.rb </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>aaaa=[</span><span class="string">&quot;&nbsp;aa&nbsp;&quot;</span><span>,4,5,</span><span class="string">&quot;&nbsp;bb&nbsp;&quot;</span><span>] &nbsp;&nbsp;</span></li>
    <li class=""><span>bbbb=[4,1,3,2,5] &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;aaaa&nbsp;+&nbsp;bbbb&nbsp;&nbsp;&nbsp;&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;aa&nbsp;45&nbsp;bb&nbsp;41325 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;aaaa&nbsp;*&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;aa&nbsp;45&nbsp;bb&nbsp;&nbsp;aa&nbsp;45&nbsp;bb </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;bbbb&nbsp;-&nbsp;aaaa&nbsp;&nbsp;&nbsp;&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;132 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#并运算；交运算 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;aaaa&nbsp;|&nbsp;bbbb&nbsp;&nbsp;&nbsp;&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;aa&nbsp;45&nbsp;bb&nbsp;132 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;aaaa&nbsp;&amp;&nbsp;bbbb&nbsp;&nbsp;&nbsp;&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;45 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#排序；倒置 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>print&nbsp;bbbb.sort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;12345 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>print&nbsp;aaaa.reverse&nbsp;&nbsp;&nbsp;&nbsp;,</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;bb&nbsp;54&nbsp;aa</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p><br />
</p>
<font size="2">
<p><font size="2" face="Arial">完整阅读，请看我写的 <font color="#0000ff"><a href="http://www.javaeye.com/topic/47611">Ruby语言中文教程all in one</a>&nbsp;&nbsp; </font>&nbsp;</font><font face="Arial"><br />
</font><font size="2">&nbsp;</font></p>
<p>&nbsp;</p>
</font></font>
          <br/>
          <span style="color:red;">
            <a href="http://kaichuan-zhang.javaeye.com/blog/54175#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 Feb 2007 06:03:44 +0800</pubDate>
        <link>http://kaichuan-zhang.javaeye.com/blog/54175</link>
        <guid>http://kaichuan-zhang.javaeye.com/blog/54175</guid>
      </item>
      <item>
        <title>7.4  require 和 load</title>
        <author>凌川__</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kaichuan-zhang.javaeye.com">凌川__</a>&nbsp;
          链接：<a href="http://kaichuan-zhang.javaeye.com/blog/54174" style="color:red;">http://kaichuan-zhang.javaeye.com/blog/54174</a>&nbsp;
          发表时间: 2007年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Arial">程序 E7.3-1.rb中先写了Me模块，然后include&nbsp; Me模块，实现了Mix-in功能，但是，这样没能做到代码复用。<br />
我将 Me模块写在文件 E7.4-1.rb中，将 Person类写在文件 E7.4-2.rb中，这时候 Student类如何使用 Me模块和 Person类呢？这里要用到require方法。<br />
看程序 E7.4-3.rb ：</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E7.4-3.rb&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>require&nbsp;</span><span class="string">&quot;E7.4-1&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>require&nbsp;</span><span class="string">&quot;E7.4-2&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">class</span><span>&nbsp;Student&nbsp;&lt;&nbsp;Person &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;include&nbsp;Me &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>aStudent=Student.</span><span class="keyword">new</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>aStudent.talk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;I'm&nbsp;talking. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>puts&nbsp;aStudent.sqrt(77,2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;8.77496438739435</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
</p>
<p><font size="2" face="Arial"><br />
使用 require方法让你的程序文件变得简洁有力。 require方法包含另一个文件，另一个文件名需要是一个字符串。<br />
还有一个 load 方法与require 方法相对应，也用来包含另一个文件。<br />
看程序 E7.4-4.rb ：</font></p>
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E7.4-4.rb&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>load&nbsp;</span><span class="string">&quot;E7.4-1.rb&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">class</span><span>&nbsp;Student&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>aStudent=Student.</span><span class="keyword">new</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>aStudent.extend(Me) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>puts&nbsp;aStudent.sqrt(100.1,&nbsp;12)&nbsp;&nbsp;</span><span class="comment">#&nbsp;=&gt;&nbsp;&nbsp;10.0049987506246</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
</p>
<font size="2" face="Arial">
<p><br />
require包含文件，只加载一次，遇到同一文件时自动忽略；不同路径下的同名文件会多次加载。 load包含文件，加载多次，即使是相同路径下同一文件。<br />
总结一下：<br />
&nbsp;require，load用于包含文件；include，extend则用于包含模块。<br />
&nbsp;require加载文件一次，load加载文件多次。<br />
&nbsp;require加载文件时可以不加后缀名，load加载文件时必须加后缀名。<br />
&nbsp;require一般情况下用于加载库文件，而load用于加载配置文件。<br />
利用load 多次加载文件的特性，可以用来实现程序的无缝升级和系统的热部署。程序功能改变了，你只需要重新load 一次，其它代码与它再次交互的时候，这个程序实际上已经不是原来的程序了。</p>
<p>&nbsp;</p>
<p><font size="2" face="Arial">完整阅读，请看我写的 <font color="#0000ff"><a href="http://www.javaeye.com/topic/47611">Ruby语言中文教程all in one</a>&nbsp;&nbsp;&nbsp;</font>&nbsp;</font><font face="Arial"><br />
</font><font size="2">&nbsp;</font><br />
</p>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://kaichuan-zhang.javaeye.com/blog/54174#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 Feb 2007 05:59:55 +0800</pubDate>
        <link>http://kaichuan-zhang.javaeye.com/blog/54174</link>
        <guid>http://kaichuan-zhang.javaeye.com/blog/54174</guid>
      </item>
      <item>
        <title>7.3  糅和(Mix-in) 与多重继承</title>
        <author>凌川__</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kaichuan-zhang.javaeye.com">凌川__</a>&nbsp;
          链接：<a href="http://kaichuan-zhang.javaeye.com/blog/54173" style="color:red;">http://kaichuan-zhang.javaeye.com/blog/54173</a>&nbsp;
          发表时间: 2007年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Arial">糅和，也译作混合插入，也许就称作 Mix-in 比较合适。<br />
现实生活中，一个乒乓球不仅是球类物体，也是有弹性的物体。 C++ 支持多重继承，多重继承有时会导致继承关系的混乱，Java只提供了单继承，通过接口可以得到多重继承的优点，又没有多重继承的缺点。Ruby 也是单继承，不是通过接口，而是通过Mix-in 模块，来实现多重继承的优点。<br />
模块的第三个作用：实现了类似多重继承的功能。</font></p>
<p><font size="2" face="Arial">我们有一个Student类，有着Person类的属性和方法，还会做数学题&mdash;&mdash;求平方根。已经有了Me模块，只要Mix-in 在Student类里就可以了。<br />
看程序 E7.3-1.rb ：</font><font size="2" face="Arial"> </font></p>
<p><font size="2" face="Arial"><strong>ruby 代码</strong></font></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-rb">
    <li class="alt"><span><span class="comment">#E7.3-1.rb&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">module</span><span>&nbsp;Me &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">def</span><span>&nbsp;sqrt(num,&nbsp;rx=1,&nbsp;e=1e-10) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;num*=1.0 &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(num&nbsp;-&nbsp;rx*rx).abs&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">class</span><span>&nbsp;Person&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">def</span><span>&nbsp;talk &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;</span><span class="string">&quot;I'm&nbsp;talking.&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">end</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">end</span><span>&nbsp;&nbsp;</span> </li>