文档

Java™ 教程-Java Tutorials 中文版
Trail: Essential Classes
Lesson: Regular Expressions
主页>必要类>正则表达式

问题和练习的答案:

问题

  1. 问题:java.util.regex 包中的三个公共类是什么?描述每一个的目的。

    答案:

    • Pattern 实例是正则表达式的编译表示。
    • Matcher 实例是解释模式并对输入字符串执行匹配操作的引擎。
    • PatternSyntaxException 定义非检查型异常,指示正则表达式中的语法错误。
  2. 问题:考虑字符串文字 "foo"。起始索引是什么?结束索引是什么?解释这些数字的含义。

    答案:字符串中的每个字符都驻留在自己的单元格中。索引位置指向单元格之间。字符串 "foo" 从索引 0 开始,到索引 3 结束,即使字符只占用单元格 0,1 和 2。

  3. 问题:普通字符和元字符有什么区别?每个举一个例子。

    答案:正则表达式中的普通字符与自身匹配。元字符是一种影响模式匹配方式的特殊字符。字母 A 是普通字符。标点符号 . 是一个匹配任何单个字符的元字符。

  4. 问题:你如何强迫元字符像普通字符一样?

    答案:有两种方法:

    • 在前面加上一个反斜杠(\);
    • 将元字符括在引用表达式中,\Q(在开头)和 \E(在结尾处)。
  5. 问题:你怎么称方括号括起来的一组字符?它是为了什么?

    答案:这是字符类。它匹配括号中表达式指定的字符类中的任何单个字符。

  6. 问题:以下是三个预定义的字符类:\d\s\w。描述每一个,并使用方括号重写它。

    答案:

    \d 匹配任何数字。 [0-9]
    \s 匹配任何空白字符。 [ \t\n-x0B\f\r](译注:这里应该是 [ \t\n\x0B\f\r])
    \w 匹配任何单词字符。 [a-zA-Z_0-9]
  7. 问题:对于 \d\s\w 中的每一个,编写 两个 简单表达式与 相反的 字符集匹配。

    答案:

    \d \D [^\d]
    \s \S [^\s]
    \w \W [^\w]
  8. 问题:考虑正则表达式 (dog){3}。确定两个子表达式。表达式匹配什么字符串?

    答案:表达式由捕获组 (dog) 组成,后跟贪婪量词 {3}。它匹配字符串“dogdogdog”。

    练习

    1. 练习:使用反向引用来编写一个表达式,使其仅当该人的名字和姓氏相同时,才与人名相匹配。

      解决方案:([A-Z][a-zA-Z]*)\s\1


Previous page: Questions and Exercises: Regular Expressions