`
ywg2008
  • 浏览: 46444 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

java正则表达式: regular expression(二)

阅读更多
一个正则表达式应用实践

Regexes let you create powerful text-processing applications. One application you might find helpful extracts comments from a Java, C, or C++ source file, and records those comments in another file. Listing 2 presents that application's source code:
Listing 2. ExtCmnt.java
 
  1. // ExtCmnt.java  
  2.   
  3. import java.io.*;  
  4. import java.util.regex.*;  
  5.   
  6. class ExtCmnt {  
  7.     public static void main (String [] args) {  
  8.         if (args.length != 2) {  
  9.             System.err.println ("usage: java ExtCmnt infile outfile");  
  10.             return;  
  11.         }  
  12.   
  13.         Pattern p;  
  14.         try {  
  15.             // The following pattern lets this extract multi-line comments that  
  16.             // appear on a single line (e.g., /* same line */) and single-line  
  17.             // comments (e.g., // some line). Furthermore, the comment may  
  18.             // appear anywhere on the line.  
  19.   
  20.             p = Pattern.compile (".*/\\*.*\\*/|.*//.*$");  
  21.         } catch (PatternSyntaxException e) {  
  22.             System.err.println ("Regex syntax error: " + e.getMessage ());  
  23.             System.err.println ("Error description: " + e.getDescription ());  
  24.             System.err.println ("Error index: " + e.getIndex ());  
  25.             System.err.println ("Erroneous pattern: " + e.getPattern ());  
  26.             return;  
  27.         }  
  28.   
  29.         BufferedReader br = null;  
  30.         BufferedWriter bw = null;  
  31.   
  32.         try {  
  33.             FileReader fr = new FileReader (args [0]);  
  34.             br = new BufferedReader (fr);  
  35.   
  36.             FileWriter fw = new FileWriter (args [1]);  
  37.             bw = new BufferedWriter (fw);  
  38.   
  39.             Matcher m = p.matcher ("");  
  40.             String line;  
  41.             while ((line = br.readLine ()) != null) {  
  42.                 m.reset (line);  
  43.                 /* entire line must match */   
  44.                 if (m.matches ()){  
  45.                     bw.write (line);  
  46.                     bw.newLine ();  
  47.                 }  
  48.             }  
  49.         } catch (IOException e) {  
  50.             System.err.println (e.getMessage ());  
  51.             return;  
  52.         } finally // Close file {  
  53.             try {  
  54.                 if (br != null)  
  55.                     br.close ();  
  56.   
  57.                 if (bw != null)  
  58.                     bw.close ();  
  59.             } catch (IOException e) {}  
  60.         }  
  61.     }  
  62. }  
在创建Pattern 和Matcher 对象之后,ExtCmnt 逐行的读取一个文本文件的内容。对于每一行,matcher尝试匹配pattern的行,鉴别是一个单行的注释或者多行的注释在一行中出现。假如一行匹配 pattern,ExtCmnt 将此行写入另外一个文本文件中。例如,java ExtCmnt ExtCmnt.java out 读取ExtCmnt.java 文件的每一行,根据pattern来尝试着一行,将匹配的行输出到名叫out的文件。 (不要担心理解文件的读写逻辑。我将在将来的文章中explore这些代码。) 在ExtCmnt执行完成,out 文件包含了以下行:

// ExtCmnt.java
// The following pattern lets this extract multiline comments that
// appear on a single line (e.g., /* same line */) and single-line
// comments (e.g., // some line). Furthermore, the comment may
// appear anywhere on the line.
p = Pattern.compile (".*/\\*.*\\*/|.*//.*$");
if (m.matches ()) /* entire line must match */
finally // Close file.

这个输出显示ExtCmnt 并不完美:p = Pattern.compile (".*/\\*.*\\*/|.*//.*$"); 没有描绘一个注释。出现在out中的行因为ExtCmnt的matcher匹配了//字符。

关于pattern ".*/\\*.*\\*/|.*//.*$"由一些有趣的事,竖线元字符metacharacter (|)。依照SDK documentation,圆括号元字符在capturing group和 竖线元字符是逻辑操作符号。vertical bar 描述了一个matcher,它使用操作符左侧的正则表达式结构来在matcher的文本中定为一个match。假如没有match存在,matcher使 用操作符号右侧的正则表达式进行再次的匹配尝试。

温习

尽管正则表达式简化了在text处理程序中pattern匹配的代码,除非你理解它们,否则你不能有效的在你的程序中使用正则表达式。这篇文章通过介绍给 你regex terminology,the java.util.regex 包和示范regex constructs的程序来让你对正则表达式有一个基本的理解。既然你对regexes有了一个基本的理解,建立在通过阅读additional articles (see Resources)和学习java.util.regex's SDK 文档,那里你可以学习更多的regex constructs ,例如POSIX (Portable Operating System Interface for Unix) 字符类。

我鼓励你用这篇文章中或者其它以前文章中资料中问题email me。(请保持问题和这个栏目讨论的文章相关性。)你的问题和我的回答将出现在相关的学习guides中。)

After writing Java 101 articles for 28 consecutive months, I'm taking a two-month break. I'll return in May and introduce a series on data structures and algorithms.
About the author

Jeff Friesen has been involved with computers for the past 23 years. He holds a degree in computer science and has worked with many computer languages. Jeff has also taught introductory Java programming at the college level. In addition to writing for JavaWorld, he has written his own Java book for beginners—Java 2 by Example, Second Edition (Que Publishing, 2001; ISBN: 0789725932)—and helped write Using Java 2 Platform, Special Edition (Que Publishing, 2001; ISBN: 0789724685). Jeff goes by the nickname Java Jeff (or JavaJeff). To see what he's working on, check out his Website athttp://www.javajeff.com.
分享到:
评论

相关推荐

    使用Java正则表达式分析处理日志

    本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作日志数据。 首先,我们需要理解正则表达式的基本概念。正则表达式(Regular Expression)是一种模式...

    Java正则表达式 Java 正则表达式

    Java正则表达式是Java语言中用于处理字符串的强大工具,它允许程序员进行复杂的字符串匹配、查找和替换操作。正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中...

    正则表达式(regular expression)手册

    正则表达式(Regular Expression,简称regex)是用于在文本中匹配特定模式的强大工具,广泛应用于数据验证、搜索与替换、文本分析等多个领域。在IT行业中,熟练掌握正则表达式能够极大地提升处理字符串问题的效率。...

    JAVA正则表达式大全

    以下是对这些文档标题所涉及的Java正则表达式知识点的详细解释: 1. **正则表达式之道** 这个主题可能涵盖了正则表达式的基础概念,包括元字符、字符类、量词和分组。元字符如`.`代表任意字符,`^`表示行首,`$`...

    java正则表达式匹配工具

    Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...

    java正则表达式: regular expression(一)

    Java正则表达式是编程语言Java中的一个强大工具,它用于处理字符串的模式匹配和文本检索替换。在本文中,我们将深入探讨Java正则表达式的概念、语法以及如何在实际项目中应用它们。 正则表达式(Regular Expression...

    正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本匹配工具,在编程和文本处理

    正则表达式:正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本匹配工具,在编程和文本处理中非常有用。它可以用于搜索、编辑、或操纵文本。几乎所有现代编程语言都支持正则表达式的使用,...

    java 正则表达式应用jar包 regex-smart.jar

    Java正则表达式是编程语言Java中的一个强大工具,它用于模式匹配、数据验证和文本检索替换。在Java中,正则表达式是通过java.util.regex包提供的接口和类来实现的。`regex-smart.jar`这个库显然是为了简化开发者在...

    常用正则表达式HTML,JAVA合集

    这个合集提供的HTML和Java正则表达式实例,为开发者提供了一个快速参考的工具,帮助他们在开发过程中快速有效地实现数据验证功能。理解并熟练运用这些正则表达式,对于提高代码质量和用户体验都有极大的帮助。在实际...

    Java 正则表达式库

    Java正则表达式库是Java开发中不可或缺的一部分,它为开发者提供了一种强大的文本匹配工具。在Java中,正则表达式(Regular Expression)是一种模式匹配语言,用于处理字符串操作,如查找、替换或提取特定模式的数据...

    Java正则表达式详细讲解

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。在Java中,正则表达式是通过`java.util.regex`包提供的API来实现的。本讲解将深入探讨Java正则表达式的...

    正则表达式自动生成器 V2.0.0.1 官方多语版

    正则表达式(Regular Expression)是一种模式匹配语言,通过预定义的规则来识别和操作字符串。它由一系列特殊字符和组合构成,可以用来检查一个字符串是否符合特定的格式,或者从中提取所需的信息。例如,你可以用...

    PB实现的正则表达式

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...

    java正则表达式的使用示例

    Java正则表达式是Java编程语言中的一个强大工具,它用于模式匹配和字符串处理。正则表达式(Regular Expression)是一串特殊的字符序列,可以用来匹配或查找其他字符串中的模式。在Java中,正则表达式的操作主要通过...

    正则表达式判断密码强度

    正则表达式(Regular Expression)是一种强大的工具,用于在字符串中匹配特定模式,它在这里被用来判断用户设定的密码是否符合一定的强度标准。以下是对这个话题的详细解释。 首先,密码强度通常涉及到以下几个方面...

    java 正则表达式大全 菜鸟也能玩转

    ### Java正则表达式大全:菜鸟也能玩转 在Java编程语言中,正则表达式是一种强大的工具,用于处理字符串的搜索、替换等操作。它能够帮助开发者更加灵活地进行文本处理工作。本文将深入介绍Java中的正则表达式基础...

    正则表达式 Regular Expression 正则表达式资料大全压缩包

    正则表达式(Regular Expression,简称regex)是用于在文本中匹配特定模式的强大工具,它在编程、数据处理和文本分析等领域中广泛应用。这个“正则表达式资料大全压缩包”很可能包含了各种教程、示例、参考手册以及...

    Java 正则表达式判断字符串是否包含中文

    ### Java正则表达式判断字符串是否包含中文 在日常的软件开发过程中,我们经常会遇到需要对输入的字符串进行校验的情况。例如,在处理用户输入、文本分析或数据清洗时,可能需要判断一个字符串中是否包含中文字符。...

    正则表达式:文本处理的强大工具.pdf

    正则表达式(Regular Expression),简称regex或regexp,是一种强大的文本处理工具,主要用于描述文本模式的特殊字符串。这种工具通过一系列字符组成的模式来匹配、搜索、替换或验证文本中的特定模式。在文本处理...

Global site tag (gtag.js) - Google Analytics