快速业务通道

Merlin的魔力: 用新的正则表达式库解析字符序列 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
围字符的字符类。例如, [A-J] 表示从 A 到 J 的大写字母。

否定(Negation):脱字符(^)否定字符类的内容。例如, [^A-J] 表示除 A 到 J 之外的任何字符。

请参阅 Pattern API 文档(可以从 参考资料找到)了解关于序列的其它详细信息。

如何有效地使用模式

既然您已经了解了如何指定模式,我们就来使用它们吧。您需要让 Pattern 类编译它们,如下所示。注意,反斜杠字符(\)在 String 常量中需要转义。

Pattern pattern = Pattern.compile( "\\p{Alnum}+@\\w+\\.\\p{Alpha}{2,3}");

有了一个编译好的模式后,您可以使用 Pattern 类根据模式把一个输入行分割为一系列单字,或者使用 Matcher 类执行一些更复杂的任务。下面说明了如何分割输入字符序列,其中使用的模式指定了分隔符,而不是字:

String words[] = pattern.split(input);

如果您想在一个字符序列中多次匹配一个模式,上面的代码片段是一个很好的起点。但如果您想获取特定的输入,您将需要 Pattern 的 matcher() 方法。在给定某个输入时,这个方法将返回适当的 Matcher 类。接着,您使用 Matcher 实例遍历整个结果在输入序列中查找不同的模式匹配,或者使用 Matcher 实例作为查找-替换工具(后一种方法更好):

Matcher matcher = pattern.matcher(input);

要根据整个序列匹配模式,请使用 matches() 。要确定是否只有序列的一部分匹配,请使用 find() :

if (matcher.find()) {    // Found some string within input sequence    // That matched the compiled pattern    String match = matcher.group();    // Process matching pattern }

Merlin的魔力: 用新的正则表达式库解析字符序列(3)

时间:2011-02-02 IBM John Zukowski

完整的示例

这两个类( Pattern 与 Matcher )就是整个模式匹配库。提出正确的正则表达式,然后使用 Matcher 类的结果,这就是这个模式匹配库要做的全部工作。在针对 Java 语言的关于正则表达式的专门书籍出现之前,请找一本关于 Perl 的好书来进一步了解特定的模式。清单 1 提供了一个完整的示例,该示例将在特定文件中查找从命令行作为输入而传入的最长单词。

清单 1.“最长的单词”示例

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
import java.util.*;
import java.util.regex.*;
public class Longest {
  public static void main(String args[]) {
    if (args.length != 1) {
      System.err.println("Provide a filename");
      return;
    }
    try {
      // Map File from filename to byte buffer
      FileInputStream input =
        new FileInputStream(args[0]);
      FileChannel channel = input.getChannel();
      int fileLength = (int)channel.size();
      MappedByteBuffer buffer = channel.map(
        FileChannel.MapMode.READ_ONLY, 0, fileLength);
      // Convert to character buffer
      Charset charset = Charset.forName("ISO-8859-1");
      CharsetDecoder decoder = charset.newDecoder();
      CharBuffer charBuffer = decoder.decode(buffer);
      // Create line pattern
      Pattern linePattern =
        Pattern.compile(".*contentquot;, Pattern.MULTILINE);
      // Create word pattern
      Pattern wordBreakPattern =
        Pattern.compile("[\\p{Punct}\\s}]");
      // Match line pattern to buffer
      Matcher lineMatcher =
        linePattern.matcher(charBuffer);
      // Holder for lo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号