12 问题和练习

优质
小牛编辑
134浏览
2023-12-01

〖问题〗

1. 在 java.util.regex 包中有哪三个公共的类?描述一下它们的作用。

2. 考虑一下字符串“foo”,它的开始索引是多少?结束索引是多少?解释一下这些编号的意思。

3. 普通字符和元字符有什么不同?各给出它们的一个例子。

4. 如何把元字符表现成像普通字符那样?

5. 附有方括号的字符集称为什么?它有什么作用?

6. 这里是三个预定义的字符类:\d\s\w。描述一下它们各表示什么?并使用方括号的形式将它们重写。

7. 对于\d\s\w,写出两个简单的表达式,匹配它们相反的字符集。

8. 思考正则表达式(dog){3},识别一下其中的两个子表达式。这个表达式会匹配什么字符串?

〖练习〗

1. 使用反向引用写一个表达式,用于匹配一个人的名字,假设这个人的 first 名字与 last 名字是相同的。

【问题答案】

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. 练习:使用反向引用写一个表达式,用于匹配一个人的名字,假设这个人的 first 名字与 last 名字是相同的。

解答:([A-Z][a-zA-Z]*)\s\1