正则表达式最佳教程3(7)

2019-02-15 11:13

011 012 013 014 015 016 017 018 019 020

import java.util.regex.Pattern; import java.util.regex.Matcher;

public class MatcherDemo {

private static final String REGEX = \

private static final String INPUT = \

public static void main(String[] args) { Pattern p = Pattern.compile(REGEX);

Matcher m = p.matcher(INPUT); // 获得匹配器对象 int count = 0;

while (m.find()) { count++;

System.out.println(\ System.out.println(\ System.out.println(\ } } }

输出:

Match number 1

start(): 0 end(): 3

Match number 2 start(): 4 end(): 7

Match number 3 start(): 8

end(): 11

可以看出,这个例子使用了单词边界,用于确保更长单词中的字母“d”“o”“g”就不是子串了。它也输出了一些有用的信息,在输入的字符串中什么地方有匹配。start 方法返回在以前的匹配操作期间,由给定组所捕获子序列的开始处索引,end 方法返回匹配到最后一个字符索引加 1。 9.2 使用 matches 和 lookingAt 方法返回目录

matches 和 lookingAt 方法都是尝试该模式匹配输入序列。然而不同的是,matches 要求匹配整个输入字符串,而 lookingAt 不是这样。这两个方法都是从输入字符串的开头开始的。下面是 MatchesLooking.java 完整的代码:

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023

import java.util.regex.Pattern; import java.util.regex.Matcher;

public class MatchesLooking {

private static final String REGEX = \

private static final String INPUT = \ private static Pattern pattern; private static Matcher matcher;

public static void main(String[] args) {

// 初始化

pattern = Pattern.compile(REGEX); matcher = pattern.matcher(INPUT);

System.out.println(\ System.out.println(\

System.out.println(\ System.out.println(\ } }

输出:

Current REGEX is: foo

Current INPUT is: fooooooooooooooooo lookingAt(): true matches(): false

9.3 使用 replaceFirst(String) 和 replaceAll(String) 方法返回目录

replaceFirst 和 replaceAll 方法替换匹配给定正则表达式的文本。从它们的名字可以看出,

replaceFirst 替换第一个匹配到的,而 replaceAll 替换所有匹配的。下面是 ReplaceDemo.java 的代码:

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016

import java.util.regex.Pattern; import java.util.regex.Matcher;

public class ReplaceDemo {

private static String REGEX = \

private static String INPUT = \meow.\

private static String REPLACE = \

public static void main(String[] args) { Pattern p = Pattern.compile(REGEX);

Matcher m = p.matcher(INPUT); // 获得匹配器对象 INPUT = m.replaceAll(REPLACE); System.out.println(INPUT); } }

输出:

The cat says meow. All cats say meow.

在上面的例子中,所有的 dog 都被替换成了 cat。但是为什么在这里停下来了呢?你可以替换匹配任何正则表达式的文本,这样优于替换一个简单的像 dog 一样的文字。这个方法的 API 描述了“给定正则表达式a*b,在输入?aabfooaabfooabfoob?和替换的字符串是?-?情况下,表达式的匹配器调用方法后,会产生成字符串?-foo-foo-foo-?。”

下面是 ReplaceDemo2.java 的代码:

001 002 003 004 005 006 007 008 009 010 011 012 013 014

015 016

import java.util.regex.Pattern; import java.util.regex.Matcher;

public class ReplaceDemo2 {

private static String REGEX = \

private static String INPUT = \ private static String REPLACE = \

public static void main(String[] args) { Pattern p = Pattern.compile(REGEX);

Matcher m = p.matcher(INPUT); // 获得匹配器对象 INPUT = m.replaceAll(REPLACE); System.out.println(INPUT); } }

输出:

-foo-foo-foo-

仅要替换模式一次时,可以简单地调用 replaceFirst 用于取代 replaceAll,它接受相同的参数。 9.4 使用 appendReplacement(StringBuffer, String) 和 appendTail(StringBuffer) 方法返回目录

Matcher 类也提供了 appendReplacement 和 appendTail 两个方法用于文本替换。下面的这个例子(RegexDemo.java)使用了这两个方法完成与 replaceAll 相同的功能。

001 002 003 004 005 006 007 008 009 010 011 012


正则表达式最佳教程3(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浙大远程教育民法总论在线作业答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: