文档

Java™ 教程
教程目录: 基本的Java类
课程: 正则表达式
首页 > 基本Java类 > 正则表达式

问题和练习答案:

问题

  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]
    \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


上一页:问题和练习:正则表达式